我有一個 Windows 表單應用程式,并且有一個組合框,它是從一個 txt 檔案填充的。
List<string> lines = System.IO.File.ReadLines(path).ToList();
foreach (string l in lines)
{
combobox.Items.Add(l);
}
作為一個按鈕的結果,我想改變路徑。是否可以?我改變了路徑,但什么也沒發生,我想是因為我需要再次呼叫建構式,但是按鈕在另一個視窗中,組合框在另一個視窗中。
uj5u.com熱心網友回復:
private void Form1_Load(object sender, EventArgs e)
{
List<string> lines = System.IO.File.ReadLines(path).ToList();
foreach (string line in lines)
{
comboBox1.Items.Add(line);
}
}
private void populateCombo(string path)
{
comboBox1.Items.Clear();
List<string> lines = System.IO.File.ReadLines(path).ToList();
foreach (string line in lines)
{
comboBox1.Items.Add(line);
}
}
private void button1_Click(object sender, EventArgs e)
{
populateCombo(differentPath);
}
uj5u.com熱心網友回復:
即使您選擇了答案,正如 john 所提到的,更好的方法是使用 BindingList。在下面的代碼中,自定義 BindingList 用于提供一種方法來將專案添加到當前資料中,從而使您的代碼保持干凈。您可以使用標準的 BindingList,第二次加載使用 foreach 附加資料。
有兩個按鈕,第一個從文本檔案加載,然后第一次加載 ComboBox,第二個按鈕附加到資料。兩者都使用硬編碼檔案名,您可以輕松更改。
將以下內容放在專案的類檔案中。
來源
public class BindingListSpecial<I> : BindingList<I>
{
private readonly List<I> _baseList;
public BindingListSpecial() : this(new List<I>()) { }
public BindingListSpecial(List<I> baseList) : base(baseList)
{
_baseList = baseList ?? throw new ArgumentNullException();
}
public void AddRange(IEnumerable<I> vals)
{
if (vals is ICollection<I> collection)
{
int requiredCapacity = Count collection.Count;
if (requiredCapacity > _baseList.Capacity)
_baseList.Capacity = requiredCapacity;
}
bool restore = RaiseListChangedEvents;
try
{
RaiseListChangedEvents = false;
foreach (I v in vals)
Add(v); // We cant call _baseList.Add, otherwise Events wont get hooked.
}
finally
{
RaiseListChangedEvents = restore;
if (RaiseListChangedEvents)
ResetBindings();
}
}
}
表格代碼
public partial class Form1 : Form
{
private BindingListSpecial<string> _bindingList;
public Form1()
{
InitializeComponent();
}
private void LoadButton1_Click(object sender, EventArgs e)
{
_bindingList = new BindingListSpecial<string>(File.ReadAllLines("TextFile1.txt").ToList());
comboBox1.DataSource = _bindingList;
}
private void LoadButton2_Click(object sender, EventArgs e)
{
_bindingList.AddRange(File.ReadAllLines("TextFile2.txt").ToList());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465197.html
上一篇:訊息佇列與快遞柜之間的奇妙關系
