I’m writing a simple WinForms app that parses a text file for correct values, and as it finds an incorrect value, opens up a new form, which displays the incorrect or missing value, with the user being able to input the correct value. I have the problem where, for example, I’ll deliberately put two incorrect values in my text file to check, and the form window closes immediately after its opened for the first error,and only stays open for the second error to be fixed.
foreach (string line in lines)
{
string[] items = line.Split('\t').ToArray();
for (int i = 0; i <custIndex.Count; i++)
{
int index = custIndex[i];
Globals.Code = items[index - 1].ToUpper();
if (!CountryList.ContainsKey(Globals.Code) && !StateList.ContainsKey(Globals.Code))
{
form2.textBox1.Text = Globals.Code;
form2.Show();//Shows form2 for user to enter correct input
}
}//inner for
}//inner for each
Here’s the form 2 code (form 2 being instantiated at the beginning of the method before the looping):
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
//
private void button1_Click(object sender, EventArgs e)
{
Globals.Code = textBox2.Text;
this.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
The user is supposed to press the button after entering a new value for Globals.Code (I used a global variable, not sure if that was the most kosher way of doing things).After which the form closes and goes back to Form 1. I think form 2 is being displayed properly with the first error value from the text file, but it immediately opens and closes. Is there a way to keep the window open? I’m sorry if this is convoluted, I’m doing a lot of Winforms and I’m not really an expert on this stuff.
Thanks,
Amanda
Your best bet may be to use a modal dialog, so change
form2.Showtoform2.ShowDialog.However, when using a global variable with a loop like that, the global variable will only have the last value put into the form after the loop is complete. If you use the ShowDialog approach, the call will block at that line until the user closes the dialog. After that point you can read the value from the textbox and do something with it.