[英]Text box does not update after changing after selected item in ComboBox (ComboBox gets the list from a text file)
我在 WinForms 应用程序中遇到了 ComboBox 的问题。 组合框包含一个列表,其中包含从 TXT 文件中获取的项目。 为了阅读和更新列表,我将以下代码添加到 Form_Load。
string[] lineOfContents = File.ReadAllLines(Application.StartupPath + @"Items.txt");
foreach(var line in lineOfContents)
{
string[] tokens = line.Split(',');
ComboBox.Items.Add(tokens[0]);
}
一切都很好,列表确实更新了。 但是,我也有一些文本框根据 ComboBox 中所选项目的字符串更改其文本。 例如,当 ComboBox 中的选中项为“示例”时,第一个文本框中的文本应由空变为“我是示例”。 但它没有并且仍然为空:它的代码是:
if(ComboBox.SelectedItem == "Example")
{
TextBox.Text = "I am an example!";
}
起初我认为这是一个转换问题,所以我尝试使用Convert.ToString(tokens[0]);
但它也没有奏效。
关于我接下来应该尝试解决此问题的任何建议?
您正在描述绑定行为,因此首先要检查的是TextBox
是否正确绑定到ComboBox
。 像这样的东西会起作用:
public MainForm()
{
InitializeComponent();
// Attach text box text to changes of combo box text
textBox1.DataBindings.Add(
nameof(textBox1.Text),
comboBox1,
nameof(comboBox1.Text)
);
}
但是我在您的代码中注意到的另一件事是,在将令牌加载到组合框中后,您似乎没有select组合框中的值。 这将文本框留空,如下所示:
private void buttonLoad_Click(object sender, EventArgs e)
{
loadMockFile();
}
private void loadMockFile()
{
string[] lineOfContents = MockFile;
foreach (var line in lineOfContents)
{
var token =
line.Split(',')
.Select(_ => _.Trim())
.Distinct()
.First();
if (!comboBox1.Items.Contains(token))
{
comboBox1.Items.Add(token);
}
}
}
string[] MockFile = new string []
{
"Example, A, B,",
"Other, C, D,",
};
因此,解决方案是确保在将令牌加载到ComboBox
后进行选择,例如 [Load + Select] 按钮的处理程序中所示:
private void buttonLoadPlusSelect_Click(object sender, EventArgs e)
{
loadMockFile();
var foundIndex = comboBox1.FindStringExact("Example");
comboBox1.SelectedIndex = foundIndex;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.