问题描述
我使用的是 C# Windows 窗体。我有一个 MDI 应用程序,其中一个面板固定在 MDI 窗体的左侧。我打开最大化的 MDI 子窗口,效果很好。但是,我有两个不同的问题,它们可能是相互关联的,它们是:
当我单击 MDI 子窗体上的恢复按钮时,该窗体进入一种伪最小化状态,位于 MDI 父窗体的中间。无法调整它的大小并拉伸它,甚至无法移动它。然后我可以最小化它(到父级的底部),恢复它(到同样奇怪的伪最小化状态)或像以前一样最大化它。我如何让它进入正常状态...... errr......正常。
发生的另一个影响(可能相关也可能无关)是,当我打开子项时,表单的标题栏没有与 MDI 菜单集成。有子窗口栏,然后是 MDI 菜单栏。通常这些集成。
我制作了一个短视频来演示这一点,一张图片值一千字,在这里:https://youtu.be/l1yFeDFJeMQ
为了清楚起见,MDI 父级的名称是“mdi”。 MDI 子窗体的名称是“frmForm”。这听起来可能很奇怪,但“frmForm”的目的是让您能够设计表单。
private bool EditForm(AppData.Server oServer,AppData.App oApp,int iFrmID)
{
// this edits the form passed within the indicated Appster server/app.
frmForm oFrmForm;
try
{
oFrmForm = new frmForm();
if (!oFrmForm.EditForm(_owner,_g,oServer,oApp,iFrmID)) throw new Exception("Cannot show form for editing.");
return true;
}
catch (Exception ex)
{
_g.Errs.Raise(ex);
return false;
}
}
public bool EditForm(Form oMDIParent,AppData.Globals oG,AppData.Server oServer,int iFrmID)
{
try
{
_g = oG;
_app = oApp;
_server = oServer;
_mode = Dolphin.enumFormEditMode.Edit;
toolBox.Init(_g,(TextBox)fd.Controls["txtDebug"]);
fd.Init(_g,_server);
fd.SnapToGrid = true;
svevents.Init(_g);
svSteps.Init(_g);
if (!ReadData(iFrmID)) throw new Exception("Could not read form data.");
if (!PopulateParams()) throw new Exception("Could not populate parameters list correctly.");
if (!PopulateQueries()) throw new Exception("Could not populate queries list correctly.");
if (!PopulateModes()) throw new Exception("Could not populate modes list correctly.");
if (!PopulateControls()) throw new Exception("Could not populate controls list correctly.");
if (!PopulatePropControls(false)) throw new Exception("Could not populate properties control dropdown correctly.");
if (!PopulatePropMode(false)) throw new Exception("Could not populate properties mode dropdown correctly.");
if (!ShowData()) throw new Exception("Could not populate with form data.");
//if (!SetControlAccess()) throw new Exception("Could not set access to controls correctly.");
_isDirty = false; // has to happen after all the fields are setup
if (!ValidateCtrlXml()) throw new Exception("Could not validate XML for controls."); // might set the form dirty if it has to make changes
if (!SetFormTitle()) throw new Exception("Could not set title.");
_g.DatProp.AddSubscriber(new DatPropSubscription(this,_server.ConnectionName,"Ctrl"));
_g.DatProp.AddSubscriber(new DatPropSubscription(this,"Event"));
_g.DatProp.AddSubscriber(new DatPropSubscription(this,"FrmMode"));
_g.DatProp.AddSubscriber(new DatPropSubscription(this,"FrmParam"));
_g.DatProp.AddSubscriber(new DatPropSubscription(this,"FrmQuery"));
_g.DatProp.AddSubscriber(new DatPropSubscription(this,"MacroStep"));
this.MdiParent = oMDIParent;
this.WindowState = FormWindowState.Maximized;
this.Show();
txtName.Focus();
txtName.SelectionStart = 0;
txtName.SelectionLength = txtName.Text.Length;
tcForm.SelectedTab = tcForm.TabPages["tabDesign"];
return true;
}
catch (Exception ex)
{
_g.Errs.Raise(ex);
return false;
}
}
即使代码强制窗体为 WindowState.normal,它仍然以最大化的方式打开。我错过了什么?
编辑:我已按照下方“如何避免屏幕弹跳”链接中的建议进行了更改。我现在有了一个不同的、奇怪的症状,并在这里制作了另一个视频:https://youtu.be/MQENr4pNonA
简而言之,MDI 子项似乎以最大化的方式打开,但并未占用 MDI 父项中的整个可用区域。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)