C#,。net 3.5 WinForm应用程序
我在模式弹出窗口(另一种)窗体中有一个DataGrid。我确实将对象添加到数据网格,并希望在表单显示时选择它们。听起来很简单,因为有一种方法是“SelectAll”。
但是,只有在数据网格已经可见时,此方法似乎才有效。我的订单是:1)添加对象2)调用select all 3)显示模态形式。但是当它显示时,对象会显示但不会被选中。
DialogResult r = myDialogForm.ShowModalDialog(); // objects are added, and SelectAll was called
有人知道如何完成SelectAll - 即使DataGrid还不可见。
- 关于HPT的评论(更改订单)
当我调用模态形式(System.Windows.Forms.ShowDialog
)时,我没有机会[1]在(!)显示模态形式后调用SelectAll
- 这正是问题。
下次“我的代码”到达时是DialogResult被传回的时间。可见性由底层方法(.NET框架Forms.ShowDialog
)隐式设置为true。
[1]可能的解决方法是在表单变为可见时发生事件,然后发送到SelectAll
。如果我找不到更好的东西,我会试试。
答案 0 :(得分:0)
你应该改变你的情景!
dgv.SelectAll()
你可以处理所显示的表格事件。 场景将是:
DialogForm myDF = new DialogForm();
//here you add data to your dgv in myDF
myDF.ShowDialog();
将dgv.Visible
设置为false
,您可以在InitializeComponent();
this.Shown += new EventHandler(DialogForm_Shown);
之后处理DialogForm Cunstructor中的已显示事件,然后
void DialogForm_Shown(object sender, EventArgs e)
{
dgv.SelectAll();
dgv.Show();
}
答案 1 :(得分:0)
你是否尝试过将SelectAll添加到Activated()事件中...但是,我会创建一个表单变量Boolean来识别是否已经处理了SelectAll所以每次你可以Alt-Tab到另一个时都不会这样做应用程序和返回(是的,我知道,有些人在对话框提示之间执行此操作),否则将再次重新选择。
bool WasSelectAllProcessed = false; && at the form level
然后,在Activated事件中,当SelectAll全部可见时产生影响
if ( ! WasSelectAllProcessed )
dgv.SelectAll();
答案 2 :(得分:0)
我测试了它:
当网格不可见时,忽略 SelectAll
。解决方案是在网格变为可见时注册事件(例如VisibilityChanged
),然后调用SelectAll
。
当然,这个标志是否完成将有助于避免冗余呼叫。此外,当网格已经可见时,直接调用SelectAll
是一种很好的方法。
与HPT和DRapp的建议非常相似。谢谢你帮助我。