[英]C# how to pass the value of form3 back to form1
此問題是以下問題的后續問題: 雙擊列表框中的項目后,C#文本不會顯示在其他表單上
現在,我在form3的文本框中鍵入了我的值。 在form3中按“確定”后,如何將值傳遞回form1以在列表框10中顯示? 下面是我的form3編碼,但是它不起作用:
private void button1_Click(object sender, EventArgs e)
{
//This is the coding for "OK" button.
int selectedIndex = listBox10.SelectedIndex;
listBox10.Items.Insert(selectedIndex, textBox1.Text);
}
您可以將公共財產放在form3上:
public partial class form3 : Form
{
public String SomeName
{
get
{
return textbox1.Text;
}
}
...
private void buttonOK_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
在打開form3的form1中,在ShowDialog之后,您將編寫:
if (form3.ShowDialog() == DialogResult.OK)
{
int selectedIndex = listBox10.SelectedIndex;
if (selectedIndex == -1) //listbox does not have items
listbox10.Add(form3.SomeValue);
else
listBox10.Items.Insert(selectedIndex, form3.SomeName);
}
做這樣的事情:
//form1:
public void add(int num)
{
//add num to the list box.
}
現在,form3應該在構造函數中獲取form1的實例,並將其保存:
//in form3:
private form form1_i
public form3(form i_form1)
{
.
.
.
form1_i = i_form1;
}
在按鈕上單擊form3,然后在form1中調用功能add
。
它應該是這樣的,這是最安全的方法,實際上,如果您在Windows Mobile上工作,這是不會使應用程序崩潰的唯一方法。 在桌面版本中,它可能在調試版本中崩潰。
public partial class Form1 : Form
{
public string name = "something";
public Form1()
{
InitializeComponent();
}
public delegate void nameChanger(string nme);
public void ChangeName(string nme)
{
this.name = nme;
}
public void SafeNameChange(string nme)
{
this.Invoke(new nameChanger(ChangeName), new object[] { nme });
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3(this);
f3.Show();
}
}
public partial class Form2 : Form
{
Form1 ff;
public Form2(Form1 firstForm)
{
InitializeComponent();
ff = firstForm;
}
private void button2_Click(object sender, EventArgs e)
{
ff.SafeNameChange("something different from the Form1");
this.Close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.