Interaksi antar formulir - Bagaimana cara mengubah kontrol formulir dari formulir lain?
Saya ingin mengatur comboBox.SelectedValue ketika saya memilih baris di dataGridView saya pada formulir pertama untuk mengisi comboBox dengan nilai itu di formulir lain,
Pada formulir kedua dalam acara pemuatan saya comboBox.DataSource, saya punya DisplayMember,, ValueMembersetel dengan benar tetapi tidak ada yang terjadi saat saya menyetel selectedValue pada yang pertama. Semuanya bekerja dengan baik saat saya melakukannya dalam satu bentuk
Jawaban
Formdi Windows Bentuk adalah kelas seperti kelas C # lainnya. Cara berkomunikasi antarbentuk sama dengan kelas. Anda dapat mempertimbangkan opsi ini saat berkomunikasi antar kelas:
Memanipulasi Bentuk kedua dari Bentuk pertama
Anda dapat menambahkan parameter yang sesuai ke konstruktor formulir kedua. Kemudian Anda dapat meneruskan nilai ke konstruktor saat membuat instance dari formulir kedua. Dalam formulir kedua, simpan parameter di bidang anggota dan gunakan saat Anda membutuhkannya.
Anda dapat membuat properti atau metode publik di formulir kedua dan mengatur properti tersebut setelah membuat instance dari formulir kedua. Dengan cara ini Anda dapat menggunakannya saat Anda membutuhkan formulir kedua. Pilihan ini tidak terbatas pada nilai penerusan saat membuat formulir kedua. Anda bahkan dapat menggunakan properti itu selama eksekusi detik
Form. Juga berguna untuk mendapatkan nilai darinya.Sebagai opsi lain, Anda dapat membuat kontrol yang Anda inginkan untuk memanipulasinya menjadi publik dan dengan cara ini Anda dapat mengaksesnya dari bentuk lain. Menggunakan metode adalah cara yang lebih disarankan untuk melakukan ini.
Memanipulasi Bentuk pertama dari bentuk kedua
Anda dapat membuat metode atau properti publik dalam bentuk pertama dan meneruskan contoh dari formulir pertama ke formulir kedua. Kemudian menggunakan metode / properti itu pada instance yang diteruskan, Anda dapat memanipulasi formulir pertama.
Anda dapat membuat acara di formulir kedua dan setelah membuat instance formulir kedua berlangganan di formulir pertama dan letakkan kode untuk mengubah formulir di handler. Maka itu cukup untuk mengangkat acara di bentuk kedua.
Anda dapat menentukan jenis properti publik
Actionatau beberapa jenis delegasi lainnya di formulir kedua dan kemudian setelah membuat instance dari formulir kedua, tetapkan properti menggunakan tindakan kustom. Kemudian di bentuk kedua, cukup dengan menjalankan tindakan saat Anda perlu memanipulasi bentuk pertama.Di sini juga Anda dapat membuat kontrol dari formulir pertama menjadi publik dan kemudian jika Anda meneruskan contoh dari formulir pertama ke formulir kedua, Anda dapat memanipulasi kontrol. Disarankan untuk menggunakan solusi lain. Ini seperti membuat properti atau metode publik, tetapi metode yang menjalankan tugas tertentu pada kontrol lebih baik daripada mengekspos seluruh kontrol. Tetapi Anda mungkin membutuhkan solusi ini beberapa kali.
Berikut adalah beberapa contoh berguna tentang solusi di atas.
Memanipulasi Bentuk kedua dari Bentuk pertama
Contoh1 - Menggunakan konstruktor Formulir kedua
Gunakan contoh ini saat Anda perlu meneruskan beberapa data ke formulir kedua, saat membuat formulir kedua.
public partial class Form2 : Form
{
int selectedValue;
public Form2(int value)
{
InitializeComponent();
selectedValue = value;
}
private void Form2_Load(object sender, EventArgs e)
{
//Load data
this.comboBox1.DataSource = new MyDbContext().Categories.ToList();
this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Id";
this.comboBox1.SelectedValue = selectedValue;
}
}
Kemudian di formulir pertama Anda, itu cukup untuk meneruskan nilai ke Form2saat Anda membuat instance baru:
var value = 2; // Or get it from grid
var f = new Form2(value);
f.ShowDialog();
Contoh2 - menggunakan Properti publik atau Metode Formulir kedua
Gunakan contoh ini saat Anda perlu meneruskan beberapa data ke formulir kedua, saat membuat atau bahkan setelah pembuatan formulir kedua.
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public string SomeValue
{
get { return textBox1.Text;}
set { textBox1.Text = value;}
}
}
Kemudian di formulir pertama Anda, cukup meneruskan nilai ke Form2saat Anda membutuhkannya, setelah membuat Form2atau kapan pun Anda perlu menyetel nilai textBox1on Form2:
var f = new Form2(); //value is not needed here
f.SomeValue = "some value";
f.Show();
//...
f.SomeValue = "some other value";
Contoh 3 - Membuat Pengendalian Formulir Kedua menjadi publik
Gunakan contoh ini saat Anda perlu mengubah properti kontrol pada formulir kedua, saat membuat atau bahkan setelah pembuatan formulir kedua. Lebih baik menggunakan properti atau metode publik daripada mengekspos seluruh properti kontrol.
Di Anda Form, di desainer, pilih kontrol dan di jendela Properti setel Modifiersproperti ke Public. Pastikan juga GenerateMemberproperti tersebut true. Kemudian Anda cukup mengakses kontrol ini menggunakan namanya dari luar Form.
var f = new Form2();
f.textBox1= "some value";
Memanipulasi Bentuk pertama dari bentuk kedua
Contoh 4 - Buat Metode atau Properti publik dalam Formulir pertama dan berikan contoh Formulir Pertama ke konstruktor Formulir kedua
Gunakan contoh ini ketika Anda perlu mengubah pertama Formdari Formulir kedua.
Di Anda Form1, buat properti dari metode yang menerima beberapa parameter dan letakkan logika di dalamnya:
public void ChangeTextBox1Text(string text)
{
this.textBox1.Text = text;
}
Kemudian buat konstruktor Form2yang menerima parameter tipe Form1dan pertahankan nilai yang diteruskan di bidang anggota dan gunakan saat Anda membutuhkan:
Form1 form1;
public Form2 (Form1 f)
{
InitializeComponent();
form1 = f;
}
private void button1_Click(object sender, EventArgs e)
{
form1.ChangeTextBox1Text("Some Value");
}
Sekarang saat membuat Form2Anda harus meneruskan sebuah instance Form1ke:
var f = new Form2(this);
f.Show();
Contoh 5 - Menggunakan peristiwa Formulir kedua di Formulir pertama
Lihatlah posting ini . Ini tentang komunikasi antara bentuk dan kontrol, tetapi juga berlaku untuk komunikasi antar bentuk.
Contoh 6 - Injeksi Tindakan dalam Bentuk kedua
Lihatlah posting ini . Ini tentang komunikasi antara bentuk dan kontrol, tetapi juga berlaku untuk komunikasi antar bentuk.
Contoh 7 - Membuat Pengendalian bentuk pertama menjadi publik
Dalam solusi ini Anda perlu membuat kontrol dalam bentuk pertama menjadi publik, seperti contoh 3. Kemudian seperti contoh 4 meneruskan sebuah instance dari formulir pertama ke formulir kedua dan menyimpannya di bidang dan menggunakannya saat Anda membutuhkannya. Lebih disukai menggunakan metode atau properti publik.
Form1 form1;
public Form2 (Form1 f)
{
InitializeComponent();
form1 = f;
}
private void button1_Click(object sender, EventArgs e)
{
form1.textBox1.Text = "Some Value";
}
saat membuat Form2Anda harus meneruskan sebuah contoh Form1ke itu:
var f = new Form2(this);
f.Show();