我使用一个消息框来确保用户是否想要从gridview中删除一行但是无论他们给出什么答案,它都会关闭表单并返回到form1
这是加载viewTransactions表单的地方,此代码在Form1中
private void btnViewTrans_Click(object sender, EventArgs e)
{
viewTransactions = new View_Transactions(newList);
if (viewTransactions.ShowDialog() == DialogResult.OK)
{
newList.Equals(viewTransactions.getList());
}
}
这是messageBox在viewTransaction表单中显示的位置
///////////////////////////////
//Remove an item from the list
private void button3_Click(object sender, EventArgs e)
{
DialogResult result = new DialogResult();
result = MessageBox.Show("Are you sure you want to delete this element?", "Confirmation", MessageBoxButtons.YesNoCancel);
if (result == DialogResult.Yes)
{
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
tmpList.remove(item.Index);//remove item from tmpList used to update the passed in list
dataGridView1.Rows.RemoveAt(item.Index);//remove the item from the dataGrid
}
}
}
在使用消息框显示警告之前,我对代码没有任何问题。我相信DialogResult正被传递给另一个ShowDialog,这就是为什么它会关闭我的表格。
答案 0 :(得分:0)
如果您的button3
按钮的属性DialogResult
设置为与DialogResult.None
不同,则会发生此行为。 (查看属性窗口)
当您单击一个按钮时,DialogResult属性将传递给表单的DialogResult属性,如果它与None不同,则表单将被关闭。
这就是Modal表单如何与调用代码通信用户做出的选择。
通常这个 bug 是由于Copy/Paste
另一个按钮控件的结果而发生的,该控件是通过Property Designer正确设置的,以便返回DialogResult。
顺便说一下,不需要初始化new DialogResult
的代码。
所以我建议将button3.DialogResult属性设置为DialogResult.None,然后,如果单击button3导致用户确认将Form.DialogResult属性直接设置为是。
private void button3_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Are you sure you want to delete this element?", "Confirmation", MessageBoxButtons.YesNoCancel);
if (result == DialogResult.Yes)
{
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
tmpList.remove(item.Index);//remove item from tmpList used to update the passed in list
dataGridView1.Rows.RemoveAt(item.Index);//remove the item from the dataGrid
}
this.DialogResult = DialogResult.Yes;
}
}
答案 1 :(得分:0)
我通过添加this.dialogResult = dilaogResult.None来解决它; 一旦调用button3_Click,base.DialogResult就会因某种原因而取消
史蒂夫在我尝试你的生产线时它仍会关闭,但感谢告诉我如何看待我的想法
private void button3_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.None;
DialogResult result = new DialogResult();
result = MessageBox.Show("Are you sure you want to delete this element?", "Confirmation", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
tmpList.remove(item.Index);//remove item from tmpList used to update the passed in list
dataGridView1.Rows.RemoveAt(item.Index);//remove the item from the dataGrid
}
}
}