Я думаю, что это хорошее решение, во-первых, чтобы поставить словарь где-нибудь еще (частное в виде, может быть), и заполнить его при показе формы. Это позволит вам обновить словарь при изменении текстового поля.
Предполагая это, я бы создал единый метод, который будет вызываться каждый раз, когда пользователь «покидает» поле редактирования и проверяет, был ли текст изменен, и в каком случае я бы обновил словарь.
Таким образом, «отправить» нужно просто использовать словарь, который будет обновлен уже.
например:
private Dictionary<string, string> fDic; //This must be instantiated in the initialization
//Add this method to every Leave event in all text box controls.
private void textBox_Leave(object sender, EventArgs e)
{
TextBox text = sender as TextBox;
//Check if the text changed
if (text != null)
{
if (fDic.ContainsKey((string)text.Tag))
{
if (fDic[(string)text.Tag] != text.Text)
fDic[(string)text.Tag] = text.Text;
}
else if(text.Text != null)
{
fDic[(string)text.Tag] = text.Text;
}
}
}
Прежний код будет обновлять словарь, если TAG уже есть и текст, связанный с тегом отличается от текста в текстовом поле, и если есть текст в текстовое поле и тег уже не находятся в словаре.
Я предполагаю, что «Тег» хранится в свойстве Tag каждого текстового поля. Кроме того, он будет хранить строки, состоящие из только пробелов. Если вы не хотите этого, то код может быть изменен на:
private Dictionary<string, string> fDic; //This must be instantiated in the initialization
//Add this method to every Leave event in all text box controls.
private void textBox_Leave(object sender, EventArgs e)
{
TextBox text = sender as TextBox;
//Check if the text changed
if (text != null)
{
if (fDic.ContainsKey((string)text.Tag))
{
if (fDic[(string)text.Tag] != text.Text && !string.IsNullOrWhiteSpace(text.Text))
fDic[(string)text.Tag] = text.Text;
}
else if(!string.IsNullOrWhiteSpace(text.Text) != null)
{
fDic[(string)text.Tag] = text.Text;
}
else if (string.IsNullOrWhiteSpace(text.Text)
fDic.Remove((string)text.Tag);
}
}
В коде выше, он также будет удалить из словаря, если текст пуст.
EDIT
Через какое-то общение, мы пришли с более лучший вариант, чтобы сделать то, что вы хотите сделать.
Прежде всего, сделайте словарь переменной формы, как в приведенной выше опции.
private Dictionary<string, string> fDic;
Затем, когда вы заселить TextBox, положил одну запись (с TAG) для каждого текстового поля в FDIC. Чтобы сделать это, вы можете использовать этот код:
foreach(Control ctrl in MainGrid.Children)
{
TextBox tb = ctrl as TextBox;
if (tb != null)
fDic[(string)text.Tag] = text.Text;
}
Когда событие днища нажмите называется, просто сравнить текст в текстовых полях с СВОИМ ранее сохраненным в DIC, используя словарь, чтобы сделать это.
private void Submit_Button_Click(object sender, RoutedEventArgs e)
{
Dictionary<string, string> tagDict = new Dictionary<string, string>();
foreach(Control ctrl in MainGrid.Children)
{
TextBox tb = ctrl as TextBox;
if (tb != null)
{
if (fDic[(string)text.Tag] != text.Text)
{
string tagString = tb.Tag.ToString();
string textString = tb.Text;
tagDict.Add(tagString, textString);
}
}
}
}
Используйте событие TextChanged, чтобы обнаружить изменение TextBox. – Maximus
Я попытался добавить обработчик событий TextChanged в каждый из TextBox, но я точно не знаю, как это проверить, когда происходит событие SubmitButton. Есть ли у вас какие-либо представления о том, что я могу добавить в вышеприведенное заявление «Если», чтобы проверить это? – antman1p