亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將文本框綁定到列表框 SelectedItem

將文本框綁定到列表框 SelectedItem

C#
德瑪西亞99 2023-07-22 16:29:44
我目前正在嘗試實現一個相對簡單的數據管理應用程序。我有一個 classMember和 a BindingList<Member> membersList,以及 aListBox和一些TextBoxes 。是ListBox必然的membersList?,F在,理想情況下,我希望將TextBoxes 綁定到ListBox.SelectedItem,以便用戶在 中選擇的任何元素在ListBox編輯TextBox中的元素時membersList都會更新。我嘗試將TextBoxes 綁定到ListBox.SelectedItem,但這使得 成為綁定創建時引用的Binding實際元素,而不是 中選擇的任何項目。ListBox.SelectedItemListBoxfirstNameTextBox.DataBindings.Add(new Binding("Text", membersList.SelectedItem, "firstName", false, DataSourceUpdateMode.OnPropertyChanged));實際上,我已經通過在事件處理程序中清除并重新創建 es 來解決這個問題Bindings,但這感覺非常“hacky”,我懷疑有一個更標準的解決方案。TextBoxmembersList_SelectedIndexChanged(object sender, EventArgs e)我的另一個想法是將 s 設置為事件處理程序內部的Bindinga ,但隨后我必須手動將更改寫入相應的項目,這也讓我覺得這不是最佳解決方案。Member temporaryMemberListBox.SelectedItemmembersList_SelectedIndexChanged(object sender, EventArgs e)membersList有沒有一種方法可以實現Binding動態化,即在創建時,我向它表明數據源正在發生變化?或者一種更改Binding數據源而不刪除它并創建新數據源的標準方法?(或者這實際上是最佳實踐?)(另一件事要提的是:我是 C# 新手Bindings,在尋找解決方案時,我發現顯然有兩個不同的類,一個在命名空間中System.Windows.Data,另一個在System.Windows.Forms命名空間中。我想我正在使用后者的類。也許我應該使用另一個?)
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

正如評論中所述,將BindingList(或 DataTable)與BindingSource關聯起來可以帶來一些有趣的好處。

當修改其中一個元素BindingList或將新元素添加到列表中時,所有綁定控件都會自動更新。

您可以使用MovePrevious()MoveNext()、MoveFirst()、MoveLast()方法來導航 中的元素BindingList(還可以使用其他有用的方法和事件,請參閱有關 BindingSource 功能的文檔)。

這里,a?BindingList<T>(其中TMember下面所示的類)被設置為BindingSource的DataSource。兩者都是Form類的Fields,可以根據需要修改。
然后將 BindingSource 用作 ListBox 的 DataSource。

Text然后,使用 BindingSource 將兩個 TextBox 控件的屬性綁定到該類的屬性之一Member。這樣,Text 屬性就設置為 BindingList 的當前 Item。所有控件都是同步的

txtMemberName.DataBindings.Add(new?Binding("Text",?membersSource,?
????"FirstName",?false,?DataSourceUpdateMode.OnPropertyChanged));
txtMemberLastName.DataBindings.Add(new?Binding("Text",?membersSource,?
????"LastName",?false,?DataSourceUpdateMode.OnPropertyChanged));

在實踐中,它是這樣工作的:

https://i.stack.imgur.com/sIlxa.gif

請注意,當修改 TextBox 的 Text 時,ListBox 的當前 Item 會實時更新。


BindingList<Member> members = null;

BindingSource membersSource = null;


public partial class frmMembers : Form

{

? ? public frmMembers() {

? ? ? ? InitializeComponent();

? ? ? ? InitializeDataBinding();

? ? }


? ? private void InitializeDataBinding()

? ? {

? ? ? ? members = new BindingList<Member>();

? ? ? ? membersSource = new BindingSource(members, null);


? ? ? ? lstBoxMembers.DataSource = membersSource;

? ? ? ? txtMemberName.DataBindings.Add(new Binding("Text", membersSource,?

? ? ? ? ? ? "FirstName", false, DataSourceUpdateMode.OnPropertyChanged));

? ? ? ? txtMemberLastName.DataBindings.Add(new Binding("Text", membersSource,?

? ? ? ? ? ? "LastName", false, DataSourceUpdateMode.OnPropertyChanged));

? ? }


? ? private void btnAddMember_Click(object sender, EventArgs e)

? ? {

? ? ? ? var frmNew = new frmNewMember();

? ? ? ? if (frmNew.ShowDialog() == DialogResult.OK && frmNew.newMember != null) {

? ? ? ? ? ? members.Add(frmNew.newMember);

? ? ? ? }

? ? }


? ? private void btnMovePrevious_Click(object sender, EventArgs e)

? ? {

? ? ? ? if (membersSource.Position > 0) {

? ? ? ? ? ? membersSource.MovePrevious();

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? membersSource.MoveLast();

? ? ? ? }

? ? }


? ? private void btnMoveNext_Click(object sender, EventArgs e)

? ? {

? ? ? ? if (membersSource.Position == membersSource.List.Count - 1) {

? ? ? ? ? ? membersSource.MoveFirst();

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? membersSource.MoveNext();

? ? ? ? }

? ? }

}

新會員表格樣本:


public partial class frmNewMember : Form

{

? ? public Member newMember;


? ? private void btnSave_Click(object sender, EventArgs e)

? ? {

? ? ? ? if (string.IsNullOrEmpty(txtMemberName.Text) ||?

? ? ? ? ? ? string.IsNullOrEmpty(txtMemberLastName.Text)) return;

? ? ? ? newMember = new Member(txtMemberName.Text, txtMemberLastName.Text);

? ? }

}

會員類別示例:


[Serializable()]

public class Member

{

? ? public Member() { }

? ? public Member(string firstName, string lastName)

? ? {

? ? ? ? this.FirstName = firstName;

? ? ? ? this.LastName = lastName;

? ? }

? ? public string FirstName { get; set; }

? ? public string LastName { get; set; }

? ? public override string ToString() => $"{this.FirstName} {this.LastName}";

}


查看完整回答
反對 回復 2023-07-22
  • 1 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號