我有一个WinForm应用程序,在窗体上有几个输入控件.在验证事件处理程序(Validating
或者Validated
)中,我需要根据验证的值确定接下来要激活的控件.
在Microsoft的Validating事件文档中,它声明:
警告
不要尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点.这样做可能会导致您的应用程序或操作系统停止响应.有关详细信息,请参阅"键盘输入参考"部分中的WM_KILLFOCUS主题,以及MSDN库中的"关于消息和消息队列"主题的"消息死锁"部分,网址为:http:// msdn.microsoft.com/library .
ActiveControl
Form类有一个属性,允许设置要变为活动的控件,并且不提及任何限制.经过几个小时的网络搜索后,我还没有找到任何其他解决方案.
从我的Validated事件处理程序设置ActiveControl
属性(而不是Focus
)一个安全的方式来积极激活我想要的控件?如果没有,有什么解决方案吗?
由于.NET Compact Framework没有该ActiveControl
属性,任何人都可以提出解决方案吗?
我需要一个解决方法,为继承的Windows窗体上的Panel不正确的行为.我有几个按钮应该固定在面板的右下角,但它们的位置以我无法在继承表格上预测的方式变化.我已经尝试了Dock和Anchor属性的各种组合,但到目前为止没有任何东西使按钮显示在它们应该的位置.所有控件都标记为Protected.
基本表单本身的行为是正确的.不正确的行为仅在继承的表单上发生; 按钮未锚定到其父面板.
如果我将按钮固定在左上角,我可以将继承的表单调整得更大,最终按钮将被覆盖,在基本表单大小之外的某处.如果我将按钮固定在右下角,我就无法使表单足够大,无法揭开按钮.
我已经尝试创建一个继承Panel和GroupBox的自定义面板,但这些没有任何不同.我有同样的运气将按钮直接放在表格上,没有容器.
我想要的是:一个可调整大小的表格底部的面板,其右下角有我的按钮.表单的其余部分应该是DataGridView的可调整大小的区域(我已经解决了这个的继承和对接问题>: - /)无论窗口大小如何,按钮应始终位于右下角.我不想调整按钮的大小.
如果我必须自己调整控件的大小,我愿意这样做.但是如果框架能够正确地完成它,我只需要学习如何正确使用它,我宁愿接受教育.
我发现这个链接似乎描述了类似的不当行为:如何阻止按钮移动继承的形式.它没有得到回答.
这是从我遇到问题的程序中提取的一些代码.
基本形式
//
// refreshButton
//
this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.refreshButton.Location = new System.Drawing.Point(200, 4);
this.refreshButton.Name = "refreshButton";
this.refreshButton.Size = new System.Drawing.Size(75, 23);
this.refreshButton.TabIndex = 5;
this.refreshButton.Text = "&Refresh";
this.refreshButton.UseVisualStyleBackColor = true;
//
// saveButton
//
this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.saveButton.Location = new System.Drawing.Point(281, 5);
this.saveButton.Name = "saveButton";
this.saveButton.Size = new System.Drawing.Size(75, 23);
this.saveButton.TabIndex = 4;
this.saveButton.Text = "&Save";
this.saveButton.UseVisualStyleBackColor = …
Run Code Online (Sandbox Code Playgroud)