Windows Forms窗體間通信方法
場景:
Windows Forms應用程序經常需要在多個窗體之間進行數據交互,例如根據一個窗體上的選擇來填充另一個窗體上的控件。
問題:
如何通過在第一個窗體選擇DataGridView中的行來設置第二個窗體上ComboBox的SelectedValue,從而用該值填充ComboBox?
解決方案:
在Windows Forms中,窗體與其他C#類類似,窗體間通信方法與類間通信方法相同。
在第一個窗體操作第二個窗體:
在第二個窗體操作第一個窗體:
示例:
在第一個窗體操作第二個窗體
示例1 - 使用第二個窗體的構造函數:
<code class="language-csharp">public partial class Form2 : Form { int selectedValue; public Form2(int value) { InitializeComponent(); selectedValue = value; } private void Form2_Load(object sender, EventArgs e) { // 加载数据 this.comboBox1.DataSource = new MyDbContext().Categories.ToList(); // 假设Categories是数据库表 this.comboBox1.DisplayMember = "Name"; this.comboBox1.ValueMember = "Id"; this.comboBox1.SelectedValue = selectedValue; } }</code>
在第一個窗體中:
<code class="language-csharp">int value = 2; // 或从DataGridView获取 Form2 f = new Form2(value); f.ShowDialog();</code>
示例2 - 使用第二個窗體的公共屬性:
<code class="language-csharp">public partial class Form2 : Form { public int SelectedValue { get; set; } // ... 其他代码 ... }</code>
在第一個窗體中:
<code class="language-csharp">Form2 f = new Form2(); f.SelectedValue = 2; // 或从DataGridView获取 f.ShowDialog();</code>
從第二個窗體操作第一個窗體
示例3 - 將第一個窗體的實例傳遞給第二個窗體,並使用公共方法:
<code class="language-csharp">public partial class Form2 : Form { int selectedValue; public Form2(int value) { InitializeComponent(); selectedValue = value; } private void Form2_Load(object sender, EventArgs e) { // 加载数据 this.comboBox1.DataSource = new MyDbContext().Categories.ToList(); // 假设Categories是数据库表 this.comboBox1.DisplayMember = "Name"; this.comboBox1.ValueMember = "Id"; this.comboBox1.SelectedValue = selectedValue; } }</code>
在創建Form2時:
<code class="language-csharp">int value = 2; // 或从DataGridView获取 Form2 f = new Form2(value); f.ShowDialog();</code>
這些示例展示了不同方法的實現,選擇哪種方法取決於具體應用場景和代碼結構。 建議優先考慮使用公共屬性或方法,避免直接公開控件,以提高代碼的可維護性和可讀性。
以上是如何通過在第一個表單上選擇DataGridView Row將ComboBox的Selected Value設置在第二個表單上?的詳細內容。更多資訊請關注PHP中文網其他相關文章!