我有一个带有 Search 按钮和 Submit 按钮的表单,它们位于不同的面板上,但格式相同。我想根据标准将AcceptButton
的{{1}}属性与两个按钮一起使用。
用户将使用右侧面板上的框搜索故障单,该框将填充下面的datagridview。然后,用户将选择一行,我已将其绑定到左侧面板上的文本框。 “新资产”文本框为空白,因此用户在点击“提交”之前必须先进行填充。
如果新资产编号文本框为空,是否仍然可以将Form
属性绑定到搜索文本框(右面板),然后在用户填充文本后将该属性绑定到提交按钮(左面板)框。
抱歉,这很难理解。我仍在学习c#及其可以做的所有事情。
答案 0 :(得分:1)
注意:虽然我也认为可以改进问题案例中的UI设计,但是通常可以将页面不同部分具有多个默认按钮视为正常要求,例如html
form
个元素 如果您在任意位置按Enter,则应该运行其提交按钮代码 表单元素,而您可以在一个表单上拥有多个表单 页面。
您需要做的是覆盖ProcessDialogKey
,并检查第一个面板是否包含焦点,然后单击第一个按钮;如果第二个面板包含焦点,然后单击第二个按钮:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
if (panel1.ContainsFocus)
{
button1.PerformClick();
return true;
}
if (panel2.ContainsFocus)
{
button2.PerformClick();
return true;
}
}
return base.ProcessDialogKey(keyData);
}
您还可以选择处理控件的Enter
事件,并根据焦点控件分配表单的AcceptButton
。但上方/下方
解决方案更通用,代码更少。
注意-创建具有AcceptButton属性的Panel类
除了上述解决方案之外,对于那些想用更少的代码来处理此类情况的人来说,它是可重用的解决方案,您可以使用具有AcceptButton
属性的面板类:
using System.Windows.Forms;
public class MyPanel : Panel
{
public Button AcceptButton { get; set; }
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
AcceptButton?.PerformClick();
return true;
}
return base.ProcessDialogKey(keyData);
}
}