我已经尝试过这段代码在Form2的DataGridView中添加我在主窗体(Form1)上创建的一行函数,但是当我运行它的函数时没有结果添加行,有谁知道错误在哪里? 感谢
[编辑] MainForm1中的代码:
public partial class Form1 : Form
{
Form2 sub = new Form2();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
sub.AddRow(new string[] { "1", "2" }); // able to loop
sub.Show();
this.Enabled = false;
}
}
[edit] Form2中的代码:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void AddRow(string[] values)
{
this.DGVFile.Rows.Add(values);
}
}
我得到一些答案的提示。当数据加载到Form2中的datagridview中时,我的问题得到了解答,并且我希望在打开Form2时可以禁用mainform(Form1)。现在它已经解决了。谢谢大家。
答案 0 :(得分:1)
请改用sub.Show();
。这样,下面的代码sub.ShowDialog();
甚至不会被调用。
ShowDialog
打开一个新窗体作为模态窗口,这意味着焦点仅在新窗口中,并且在关闭新窗口时会调用此调用下面的行。
您可以在MSDN here和here上找到有关这两种方法的更多信息。
<强>更新强>
但是如果打开form2
我想要禁用mainform
我可以想到两个选择。
第一个,在我看来更好的是,推迟开放表格
Form2 sub = new Form2();
sub.RegisterParent(this);
for (int x = 1; x <= 5; x++ )
{
string[] row;
row = new string[] { "1","2"};
sub.DGVFile.Rows.Add(row);
}
sub.ShowDialog(); // open when everything is prepared
第二个是
sub.Show();
this.Enabled = false;
但这不是一个很好的解决方案,因为你必须在关闭它之前从其他表单启用它,并且有很多方法可以关闭表单,你必须考虑所有。
答案 1 :(得分:1)
从按钮点击事件中创建第二个表单:Form2 sub = new Form2();
。这样,第二种形式只创建一次。然后使用ShowDialog
和Hide
方法显示模式第二种形式(第一种形式将处于非活动状态)。在第二个表单中创建一个额外的公共方法,以将新行添加到现有的DataGridView。
可能的解决方案如下所示:
public partial class MainForm : Form
{
private DataForm dataForm = null;
public MainForm()
{
InitializeComponent();
// init data form
dataForm = new DataForm();
dataForm.Init();
}
private void buttonAddRow_Click(object sender, EventArgs e)
{
// add values
dataForm.AddRow(new string[] { "10", "20" });
// show a modal second form, so that the first can not be selected while the second is open!
dataForm.ShowDialog(this);
}
}
public partial class DataForm : Form
{
public DataForm()
{
InitializeComponent();
}
// init the grid
internal void Init()
{
this.dataGridView.Columns.Add("A", "A");
this.dataGridView.Columns.Add("B", "B");
for (int x = 1; x <= 5; x++)
{
string[] row;
row = new string[] { "1", x.ToString() };
this.dataGridView.Rows.Add(row);
}
}
// add values to the grid
public void AddRow(string[] values)
{
this.dataGridView.Rows.Add(values);
}
// hide second form
private void buttonClose_Click(object sender, EventArgs e)
{
Hide();
}
}
两次添加后的输出是:
答案 2 :(得分:0)
仅在表单子关闭后执行sub.ShowDialog();
之后的代码。尝试使用sub.Show()
答案 3 :(得分:0)
请查看以下代码:
namespace TEST_CSA
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 sub = new Form2();
sub.Show(this);
this.Enabled = false;
sub.RegisterParent(this);
for (int x = 1; x <= 5; x++)
{
string[] row;
row = new string[] { "1", "2" };
sub.DGVFile.Rows.Add(row);
}
}
}
}
命令Show(this)
使Form1成为Form2的父窗体,并确保Form2始终显示在Form1的顶部。若要取消激活Form1,请使用this.Enabled = false;
要在Form2关闭时重新激活Form1,请使用以下代码:
namespace TEST_CSA
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private Form1 _parent;
internal void RegisterParent(Form1 form)
{
this._parent = form;
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
_parent.Enabled = true;
}
}
}