mah*_*esh 1 .net c# winforms public-method
我试图在Form2的另一个窗体上访问Form1的公共方法,如下所示.我textbox6对form1 有一个控件,并且有绑定它的公共方法.但是我想用form2绑定它,如下所示.
Form1中
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
public void amount_sum()
{
string connstr = " server=.;initial catalog=maa;uid=mah;pwd=mah";
SqlConnection con = new SqlConnection(connstr);
con.Open();
string sql = " select sum(amount)as amount from method";
SqlDataAdapter dap = new SqlDataAdapter(sql, con);
DataSet ds = new DataSet();
dap.Fill(ds);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
textBox6.Text = Convert.ToString(ds.Tables[0].Rows[i]["amount"]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
窗体2
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.amount_sum();
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
上面的方法调用是错误的.请建议如何纠正它.
我想通过调用public方法textBox6从Form2的Button_Click事件处理程序绑定Form1的控件,当Form2关闭时,textbox6应该绑定Form1 .可以通过从Form2调用公共方法吗?
Alb*_*nbo 11
在Form2中你有
Form1 f1 = new Form1();
f1.amount_sum();
Run Code Online (Sandbox Code Playgroud)
当您想要在表单之间传回答案时,这似乎是创建新Form1的常见错误.该new关键词做到了这一点,它会创建一个新的Form1中,调用该方法,不显示窗体Form1的原始实例不受影响.
我将展示一些如何解决这个问题的步骤.
public class Form2
{
private readonly Form1 _form1;
public Form2(Form1 form1)
{
_form1 = form1;
}
private void button1_Click(object sender, EventArgs e)
{
_form1.amount_sum(); // now this updates the existing form1 instance
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
在Form1中
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this); // pass this form1 instance to form2
f2.Show();
}
Run Code Online (Sandbox Code Playgroud)
这个问题的一个问题是在Form1和Form2之间创建了一个强大的耦合.如果您在Form1中更改某些内容,则很容易打破Form2,反之亦然.
public class Form2
{
private readonly Action _ammountUpdater;
public Form2(Action ammountUpdater)
{
_ammountUpdater = ammountUpdater;
}
private void button1_Click(object sender, EventArgs e)
{
_ammountUpdater(); // now this updates the existing form1 instance
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
在Form1中
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this.amount_sum); // pass the update method to form2
f2.Show();
}
Run Code Online (Sandbox Code Playgroud)
现在你可以amount_sum改为私有,因为它现在真的是Form1的内部事务.
| 归档时间: |
|
| 查看次数: |
21961 次 |
| 最近记录: |