标签: mdi

在 Delphi Mdi 应用程序的父窗口中使用 KeyDown 事件

即使子窗口具有焦点,如何让 KeyDown 事件在 Delphi (2007) MDI 应用程序父窗口中工作?

我想实现一个在 MDI 应用程序中显示帮助屏幕的快捷键 (F1),我已将 KeyDown 过程添加到 MDI 父窗口并在父窗口和子窗口中启用 KeyPreview,但它不起作用预期的。

如果我在Parents KeyDown 代码中放置一个断点,我可以看到它永远不会执行,即使没有打开子窗口。但是如果我将相同的代码添加到子窗口,它就可以正常工作。

有没有办法让父窗口接收按键,即使子窗口有焦点,因为将代码添加到 25+ 表单接缝有点浪费?

delphi mdi keypress

1
推荐指数
1
解决办法
7641
查看次数

我想从 Windows MDI 子窗体中删除图标

图标也有同样的问题。我对您的回答感到满意,即 seticon 属性为 false。但是我的表单是 MDI 表单的子表单,那么这个问题仍然存在,图标没有被删除。你能帮助我吗。

c# mdi

1
推荐指数
1
解决办法
5016
查看次数

单个 WPF 窗口中的不同“视图”

我正在大学学习 VB.Net 主题,主要任务是创建 WPF 应用程序。

该应用程序以管理为中心(添加、修改、删除条目等)。由于这些都是相当不同的任务,我正在考虑为我的任务创建一个选项卡式界面(与 Spybot 的界面类似:http : //www.2-spyware.com/images/data_images/spybot-search-and-销毁1.jpg)。

我有点困惑我应该如何解决这个问题?顺便说一句,这会归类为 MDI 吗?

我们被建议创建一个列出所有选项的菜单系统 - 选择一个选项后,将打开一个新窗口,进行交互。如果用户想做其他事情,他将关闭窗口以返回菜单屏幕。

这对我来说似乎并不是一种优雅的方法,而且实现我解释的基于选项卡的系统似乎是一个有趣的练习。

如果有人能指出我正确的方向或就我应该如何实现提供任何提示,我将不胜感激。例如,是否可以在单独的 xaml/代码隐藏文件中创建每个选项,然后将它们“插入”到每个选项卡中?

编辑:为了澄清,让我们假设一个室内足球队管理系统。假设用户可以执行五种不同的任务:“注册玩家”、“修改玩家”、“注册团队”、“修改团队详细信息”、“将玩家添加到团队”。

每个任务都与下一个任务分开。创建应用程序的一种方法是为每个任务创建一个带有按钮的主页。当用户单击每个按钮时,会打开一个新窗口(例如,如果用户单击“注册玩家”,则会打开一个新的 PlayerRegistration 窗口)。

如上所述,我正在寻找的是一种基于选项卡的方法。在我的应用程序中,如果用户单击“注册播放器”,则整个 PlayerRegistration xaml 文件将加载到窗口的一部分中。当用户单击任何其他按钮时也会发生同样的情况。

我想一种思考方式是使用框架的网站。

注意:如果您认为我的目标不是很合适,并且有更好的方式来布置我的应用程序,我很想听听一些建议。

.net vb.net wpf tabs mdi

1
推荐指数
1
解决办法
2768
查看次数

如何在C#中设置文件类型关联

我有一个 MDI 应用程序。这个 MDI 应用程序还有许多其他工具,包括一个编辑器。我想用我的 MDI 应用程序的编辑器打开所有“.txt”文件,从而使我的应用程序成为所有“.txt”文件的默认查看器。

每当用户编辑“.txt”文件时,MDI 应用程序应启动,并且编辑器窗口应填充所选“.txt”文件的内容。

请问有什么办法可以做到。

谢谢

c# filesystems mdi winforms

1
推荐指数
1
解决办法
2927
查看次数

C#中的工厂模型而不使用默认构造函数

我一直在使用工厂模型创建子表单以添加到MDI表单.这是我一直在使用的代码:

    /// <summary>
    /// This uses the Factory Model to create the child node and then add it to the MDI Parent (this)
    /// </summary>
    /// <param name="childName">String class name of the child, i.e. RentalEase.PropertyGrid must extend Form or SingleInstance</param>
    /// <param name="singleInstance">bool If this class is to be a single instance and restricted to only on instance. Must extend SingleInstance</param>
    public void createChild(string childName, bool singleInstance) {
        if (singleInstance) {
            try {
                BaseAndSingleInstanceForm f = BaseAndSingleInstanceForm.getInstanceByType(this, Type.GetType(childName));
                    f.MdiParent = …
Run Code Online (Sandbox Code Playgroud)

c# mdi winforms

0
推荐指数
1
解决办法
870
查看次数

我应该从"for"循环的上限减去1吗?

我在弄清楚这个功能出了什么问题时遇到了一些麻烦.我不确定我是否应该使用-1或者不再使用-1,无论我如何尝试安排代码,它似乎都会返回nil,即使它不应该.有新鲜眼睛的人可以看看吗?另外,我不确定我的结果:= nil是否在适当的位置.

function TFrmMain.FindQueryFrm(Server, Nickname: String): TFrmMessage;
var
  I,M: Integer;
begin
  ///  No -1 in the I loop - why? Because the first childform will not always be
  ///  of type TFrmMessage, which is what we're looking for.
  ///
  ///  Is this approach wrong?
  for I := 0 to MDIChildCount do
  begin
    if Screen.Forms[I] is TFrmMessage then
    begin
      ///  Same concept with -1 here (M Loop)... I need to check all forms
      ///  stored by QueryManager to see if their …
Run Code Online (Sandbox Code Playgroud)

delphi mdi for-loop

0
推荐指数
1
解决办法
528
查看次数

表单调用另一个表单,只是为了确认用户想要继续

我在VS2008环境中使用C#.

我有一个名为frmStrategy5YrPlan的表单,其中包含一个数据网格视图,用于填充数据,然后允许用户键入新的预测数据.完成后,用户将单击一个按钮上传他们输入的新数据,我希望显示另一个表单,要求他们确认是否要这样做(因为该过程会删除所有旧数据并替换为'我进入了).

我总是被表单欺骗,但基本上我希望我的初始表单加载第二个表单,评估用户是否选择确认加载数据(或不加载),然后使用初始表单中的代码处理数据.

这是我的初始形式,今天工作正常而没有调用第二种形式(我正在询问).下面是初学者的第二种形式的代码和我添加的按钮的工作方式,只是试图让两种形式相互交流.在另一部分中调用表单时,总是让我感到困惑.我对MDIParents不太熟悉,但是我在这里尝试过,我的初始表单没有设置为一个,所以我不确定这是否是解决方案.

public void btnUploadNewStrategy5YrPlan_Click(object sender, EventArgs e)
        {
            //this.ConfirmForm.Text = "DSC_0 Staged";
            //this.ConfirmForm.EnableReport(false);
            //this.ConfirmForm.Type = frmConfirmForecastUpload.LoadType.DSC_0;
            //this.ConfirmForm.MdiParent = this;
            this.ConfirmForm.Top = this.Height / 3 - this.ConfirmForm.Height / 2;
            this.ConfirmForm.Left = this.Width / 2 - this.ConfirmForm.Width / 2;
            this.ConfirmForm.Show();
            Cursor.Current = Cursors.WaitCursor;

            SqlCommand cmd = null;
            SqlDataReader dr = null;
            StringBuilder sql = new StringBuilder();

            try
            {
                var dtForecast = new DataTable();
                dtForecast.Columns.Add("Unit");
                dtForecast.Columns.Add("Year");
                dtForecast.Columns.Add("Period");
                dtForecast.Columns.Add("Acct");
                dtForecast.Columns.Add("Descr");
                dtForecast.Columns.Add("DEFERRAL_TYPE");
                dtForecast.Columns.Add("NDC_Indicator");
                dtForecast.Columns.Add("Mgmt Cd");
                dtForecast.Columns.Add("Prod");
                dtForecast.Columns.Add("Node");
                dtForecast.Columns.Add("Curve_Family");
                dtForecast.Columns.Add("Sum Amount");
                dtForecast.Columns.Add("Base Curr"); …
Run Code Online (Sandbox Code Playgroud)

c# mdi winforms

0
推荐指数
1
解决办法
207
查看次数

C# Winforms,将父对象分配给新的子对象,而不是实例化表单

我有一个带有两个子窗体的 MDI 容器。我们已经被教导(并且 MSDN 文档仅给出了示例)使用关键字“this”,它假定所讨论的子对象是从 MDI 容器本身创建的。

如果我在 MDI 容器中创建对象,这将是正确的:

Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = this;
child.Show();
Run Code Online (Sandbox Code Playgroud)

相反,我正在尝试做一些更像:

Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = Form_Parent;
child.Show();
Run Code Online (Sandbox Code Playgroud)

但是,这会引发错误,指出“Form_Parent”是一种类型,不能用作变量。我想我隐约明白它的意思,但不清楚。我也尝试过研究关键字“this”,但仍然卡住了。

c# mdi mdiparent mdichild winforms

0
推荐指数
1
解决办法
1364
查看次数

单个应用程序中的多个MDI父表单

VCL本身不允许MainForm以外的其他表单托管MDI子表单。这是Borland的硬编码限制,不是Microsoft MDI体系结构的限制。Microsoft允许应用程序中的多个窗口托管MDI子级。Win32 API中没有MainForms的概念。

我尝试将下面的embarcadro c ++示例转换为embarcadro delphi,但未成功。创建mdi子表单时,我始终遇到错误“当前没有任何mdi表单处于活动状态”。

此c ++示例演示了如何允许一个非MDI项目承载多个MDI父窗体,这些窗体都不是VCL的MainForm。

随信息一起下载(需要下载帐户) http://cc.embarcadero.com/item/23574

直接下载(无需下载帐户) http://www.delphibasics.info/MultipleMDIParentFormsInASingleApplication.zip

如果有人将这个示例从embarcadro c ++语言转换为embarcadro delphi语言,将不胜感激。谢谢。

delphi mdi vcl

-1
推荐指数
1
解决办法
1950
查看次数

-1
推荐指数
1
解决办法
1万
查看次数

Delphi:最大化MDI项目中的子窗口

有一个很好的组件可以在客户区域中最大化子窗口(必须保留SHIFT键) - NLDExtraMDIProps.

或者可以使用此代码:

procedure WMSIZE(var Msg: TMessage); message WM_SIZE;

procedure TForm2.WMSIZE(var Msg: TMessage);
begin
  inherited;
  if Msg.WParam = SIZE_MAXIMIZED then
  begin
    ShowWindow(Handle, SW_RESTORE);
    Left := 0;
    Top := 0;
    Width := Form1.ClientWidth - 4; // The BORDER
    Height := Form1.ClientHeight - 4;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但最大化并不是真正的最大化.子窗口仅与客户区对齐.它必须在调整父窗口大小时自动调整大小并适合客户区域,最大化/恢复系统按钮必须更改等.

我尝试完成下面描述的效果.

正如您在图片上看到的那样,子窗口最大化,并且

1)它们不占用整个父窗口(仅占用客户区域).

2)它们移动到标题/标题栏上是不可能的,因为它们是最大化的.

3)他们有恢复按钮,而不是最大化按钮.

4)它们客户区对齐(父窗口的大小调整导致子客户区域的大小调整).

我的问题中的代码和组件不像图片上的子窗口那样.

我们可以使窗口真正最大化(不仅仅是对齐)吗?

没有最大化(不好;我的问题中的组件和代码在这些图片上最大化):

在此输入图像描述 在此输入图像描述

最大化(我需要的):

在此输入图像描述 在此输入图像描述

delphi mdi window maximize childwindow

-2
推荐指数
1
解决办法
5103
查看次数

如果子项被重新调整大小,则在 MDI 父项中隐藏一些控件

如果子项被最大化或最小化,我想在我的 MDI 父级中隐藏我的一些控件。

c# mdi winforms

-2
推荐指数
1
解决办法
353
查看次数