Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当文本在WPF中发生更改时,如何添加多个文本框的标记值和文本值?_C#_Wpf_Textbox_Buttonclick_Textchanged - Fatal编程技术网

C# 仅当文本在WPF中发生更改时,如何添加多个文本框的标记值和文本值?

C# 仅当文本在WPF中发生更改时,如何添加多个文本框的标记值和文本值?,c#,wpf,textbox,buttonclick,textchanged,C#,Wpf,Textbox,Buttonclick,Textchanged,当单击“提交按钮”时,我正在创建一个字典,其中包含=标记值和WPF应用程序中多个文本框的文本。我只想将文本已更改的文本框的标记和文本添加到字典中。 仅当文本已更改时,如何添加多个文本框的标记值和文本值? 以下代码是我目前掌握的代码,但我被卡住了: private void Submit_Button_Click(object sender, RoutedEventArgs e) { Dictionary<string, string> tagDict = new Di

当单击“提交按钮”时,我正在创建一个字典,其中包含=标记值和WPF应用程序中多个文本框的文本。我只想将文本已更改的文本框的标记和文本添加到字典中。
仅当文本已更改时,如何添加多个文本框的标记值和文本值? 以下代码是我目前掌握的代码,但我被卡住了:

 private void Submit_Button_Click(object sender, RoutedEventArgs e)
 {
      Dictionary<string, string> tagDict = new Dictionary<string, string>();
      foreach(Control ctrl in MainGrid.Children)
      {
           if (ctrl.GetType() == typeof(textBox))
           {
                TextBox tb = ctrl as TextBox;
                if (//I am trying to get a value that represents that the Text has changed here
                     )
                {
                     string tagString = tb.Tag.ToString();
                     string textString = tb.Text;
                     tagDict.Add(tagString, textString);
                 }
            }
       }
 }
private void Submit\u按钮\u单击(对象发送者,路由目标)
{
Dictionary tagDict=新字典();
foreach(在MainGrid.Children中控制ctrl)
{
if(ctrl.GetType()==typeof(文本框))
{
TextBox tb=ctrl作为TextBox;
if(//我试图获取一个值,该值表示此处的文本已更改
)
{
string tagString=tb.Tag.ToString();
string textString=tb.Text;
tagDict.Add(tagString,textString);
}
}
}
}

我认为一个好的解决方案是,首先,将词典放在其他地方(可能是表单中的私有词典),并在显示表单时填充它。这将允许您在文本框更改时更新词典

假设这样,我将创建一个方法,在用户每次“离开”编辑框时调用,并检查文本是否更改,在这种情况下,我将更新字典

这样,“提交”只需使用已经更新的字典

例:

调用buttom click事件时,只需使用字典将文本框中的文本与先前存储在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);
             }
        }
    }
}
private void Submit\u按钮\u单击(对象发送者,路由目标)
{
Dictionary tagDict=新字典();
foreach(在MainGrid.Children中控制ctrl)
{      
TextBox tb=ctrl作为TextBox;
如果(tb!=null)
{
如果(fDic[(字符串)text.Tag]!=text.text)
{
string tagString=tb.Tag.ToString();
string textString=tb.Text;
tagDict.Add(tagString,textString);
}
}
}
}

使用event TextChanged来检测TextBox的更改。我尝试将TextChanged事件处理程序添加到每个TextBox,但我不确定在SubmitButton事件发生时如何检查。你知道我可以在上面的“如果”语句中输入什么来检查这一点吗?但我如何实际检查文本是否更改?这仍然是我将面临的问题。我假设我需要对TextChanged事件处理程序做一些事情,上面的if语句需要找到它。每次按下一个键并更改文本框中的文本时,TextChanged事件都会触发。最终,用户可以将文本作为原始文本,而您每次都会制作一些东西。如果您让验证在用户“离开”代码时进行,则只会执行一次。我将在答案中添加一些代码,以显示如何检查文本是否更改。太棒了!我看到的一个问题是,每次用户离开文本框时,如果它将标记和文本写入字典,如果用户返回并重新编辑文本框,字典条目将不会被覆盖,因此我可能会有太多条目。最终目标是使用字典创建一个数据库表,其中Tag=标题,Text=标题下要输入的值。@antman1p,否。如果查看代码,如果标记已经存在,则关联的值将被更新。在任何情况下,如果您尝试将标记添加到字典中,而该标记已经存在,则会引发异常。
    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);
        }
    }
private Dictionary<string, string> fDic;
    foreach(Control ctrl in MainGrid.Children)
    {
        TextBox tb = ctrl as TextBox;
        if (tb != null) 
            fDic[(string)text.Tag] = text.Text;
    }
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);
             }
        }
    }
}