динамическое событие кнопки при разборе xml - PullRequest
0 голосов
/ 10 марта 2011

я создаю динамическую кнопку (xmlparsingbuildbutton) во время события buttonclick (xmlparsingbutton).

Я выполнил синтаксический анализ xml ... после разбора каждой цели xml они создадут отдельный флажок. Что мне нужно, это: Создать динамическое событие кнопки (xmlparsingbuildbutton). Во время этого события динамической кнопки для каждого установленного флажка они будут добавлять текстовый файл, записывая новые строки в текстовый файл. Это сбивает меня с толку, потому что сейчас у меня есть foreachloop, встроенный в событие xmlparsingbutton, которое создает все эти флажки.

Прямо сейчас, я закодировал его таким образом, что всякий раз, когда я проверяю флажки, мое событие добавления файла не будет запускаться, поэтому я создал эту "xmlparsingbuildbutton", чтобы помочь запустить событие. Из моего понимания обычно я жесткий код buttonclickevent, однако в этом случае значение target всегда изменяется в цикле foreach, и поэтому неправильно просто жестко кодировать buttonclickevent.

Итак, мой вопрос: как сделать так, чтобы это событие кнопки было внутри цикла foreach кнопки события xmlparsing? Пожалуйста, проясните мои сомнения. Большое спасибо!

Вот мой код:

private void xmlparsingButton_Click(object sender, RoutedEventArgs e)
{
    XDocument xmlDoc = XDocument.Load(@"C:\Build.xml");
    var abc = from target in xmlDoc.Descendants("target")
              select (string)target.Attribute("if");
    ColumnDefinition gridCol1 = new ColumnDefinition();
    gridCol1.Width = new GridLength(300);
    ColumnDefinition gridCol2 = new ColumnDefinition();
    gridCol2.Width = new GridLength(300);
    ColumnDefinition gridCol3 = new ColumnDefinition();
    gridCol3.Width = new GridLength(300);
    ColumnDefinition gridCol4 = new ColumnDefinition();
    gridCol4.Width = new GridLength(300);
    tab4grid.ColumnDefinitions.Add(gridCol1);
    tab4grid.ColumnDefinitions.Add(gridCol2);
    tab4grid.ColumnDefinitions.Add(gridCol3);
    tab4grid.ColumnDefinitions.Add(gridCol4);
    RowDefinition gridRow1 = new RowDefinition();
    gridRow1.Height = new GridLength(50);
    RowDefinition gridRow2 = new RowDefinition();
    gridRow2.Height = new GridLength(50);
    RowDefinition gridRow3 = new RowDefinition();
    gridRow3.Height = new GridLength(50);
    RowDefinition gridRow4 = new RowDefinition();
    gridRow4.Height = new GridLength(50);
    RowDefinition gridRow5 = new RowDefinition();
    gridRow5.Height = new GridLength(50);
    RowDefinition gridRow6 = new RowDefinition();
    gridRow6.Height = new GridLength(50);
    RowDefinition gridRow7 = new RowDefinition();
    gridRow7.Height = new GridLength(50);
    RowDefinition gridRow8 = new RowDefinition();
    gridRow8.Height = new GridLength(50);
    RowDefinition gridRow9 = new RowDefinition();
    gridRow9.Height = new GridLength(50);
    RowDefinition gridRow10 = new RowDefinition();
    gridRow10.Height = new GridLength(50);
    RowDefinition gridRow11 = new RowDefinition();
    gridRow11.Height = new GridLength(50);
    RowDefinition gridRow12 = new RowDefinition();
    gridRow12.Height = new GridLength(50);
    tab4grid.RowDefinitions.Add(gridRow1);
    tab4grid.RowDefinitions.Add(gridRow2);
    tab4grid.RowDefinitions.Add(gridRow3);
    tab4grid.RowDefinitions.Add(gridRow4);
    tab4grid.RowDefinitions.Add(gridRow5);
    tab4grid.RowDefinitions.Add(gridRow6);
    tab4grid.RowDefinitions.Add(gridRow7);
    tab4grid.RowDefinitions.Add(gridRow8);
    tab4grid.RowDefinitions.Add(gridRow9);
    tab4grid.RowDefinitions.Add(gridRow10);
    tab4grid.RowDefinitions.Add(gridRow11);
    tab4grid.RowDefinitions.Add(gridRow12);
    int i = 0;
    int j = 1;
    System.Windows.Controls.Button XmlparsingbuildButton = new System.Windows.Controls.Button();
    Grid.SetColumn(XmlparsingbuildButton, 4);
    Grid.SetRow(XmlparsingbuildButton, 12);
    XmlparsingbuildButton.Height = 23;
    XmlparsingbuildButton.Width = 51;
    XmlparsingbuildButton.Content = "Build";
    tab4grid.Children.Add(XmlparsingbuildButton);
    foreach(string target in abc)
    {
        if (target != null && !Dictionarycheck.ContainsKey(target))
        {
            System.Windows.Controls.CheckBox chk = new System.Windows.Controls.CheckBox();
            chk.Name = target+"CheckBox";
            chk.Content = target;
            Grid.SetColumn(chk, i); //sets column
            Grid.SetRow(chk, j); //sets row                    
            tab4grid.Children.Add(chk); //adds the control
            Tabitem5.Visibility = Visibility.Visible;
            i++;
            if (i == 4)
            {
                j++;
                i = 0;
            }

            if (chk.IsChecked == true)
            {
                using (var writer = File.AppendText(@"c:\testing.txt"))
                {
                    writer.WriteLine(target);
                }

            }
        }
    }
    Tabitem5.Visibility = Visibility.Visible;
    Tabcontrol1.SelectedIndex = 4;


}

1 Ответ

0 голосов
/ 10 марта 2011

Признаюсь, у меня проблемы с пониманием вашей проблемы.Если я правильно понял, вы пытаетесь сделать следующее:

  • Синтаксический анализ документа XML ("C: \ Build.xml") с (примерно) этим форматом:
    targets>
      target if="aaa" />
      target if="bbb" />
   /targets>
  • Создайте CheckBox для каждого целевого тега с установленным атрибутом if
  • Установите флажок CheckBox, содержащий строку, которую вы хотите использовать
  • Нажмите кнопку, чтобы добавитьпроверил строки в текстовом файле ("c: \ testing.txt")

Если это правильно, то я думаю, что ваше решение не будет этого делать.Я не уверен, что могу понять, что вы пытаетесь сделать в своем коде.То, как вы настраиваете комбинированные списки, никогда не будет проверяться, когда вы используете свой писатель.

Как насчет этого:

  • Используйте StackPanel (stackPanel1) вместо сетки.Таким образом, вам не нужно создавать все определения строк.(Хорошо, я должен признать, я не знаю, для чего предназначены все эти столбцы)
  • Создать простую логику для кнопки, чтобы добавить отмеченные поля со списком в файл

код:

private void xmlparsingButton_Click(object sender, RoutedEventArgs e)
{
  stackPanel1.Children.Clear();

  XDocument xmlDoc = XDocument.Load(@"C:\Build.xml");

  var abc = from target in xmlDoc.Descendants("target")
            select (string) target.Attribute("if");

  foreach (string target in abc)
  {
    if (target != null)
    {
      System.Windows.Controls.CheckBox chk = new System.Windows.Controls.CheckBox();
      chk.Name = target + "CheckBox";
      chk.Content = target;
      chk.Tag = target;
      stackPanel1.Children.Add(chk);
    }
  }
}

private void btnAppendToTextFile_Click(object sender, RoutedEventArgs e)
{
  using (var writer = File.AppendText(@"c:\testing.txt"))
  {
    foreach (var child in stackPanel1.Children)
    {
      if ((child is CheckBox) && ((CheckBox) child).IsChecked.Value)
      {
         writer.WriteLine(((CheckBox)child).Tag);
      }
    }
  }
}

Надеюсь, это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...