как получить количество и всплывающее окно сообщения - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь заставить окно сообщения отображать элементы, но окно сообщения не появляется при запуске приложения

string xml = @"<?xml version='1.0' encoding='UTF-8'?>
<widgets>
    <widget>
        <url>~/Portal/Widgets/ServicesList.ascx</url>
        <castAs>ServicesWidget</castAs>
        <urlType>ascx</urlType>
        <parameters>
            <PortalCategoryId>3</PortalCategoryId>
        </parameters>
    </widget>
    <widget>
        <url>www.omegacoder.com</url>
        <castAs>ServicesWidget</castAs>
        <urlType>htm</urlType>
        <parameters>
            <PortalCategoryId>41</PortalCategoryId>
        </parameters>
    </widget>
</widgets>";

XDocument loaded = XDocument.Parse( xml );

var widgets = from x in loaded.Descendants( "widget" )
              select new
              {
                  URL = x.Descendants( "url" ).First().Value,
                  Category = x.Descendants( "PortalCategoryId" ).First().Value
              };

MessageBox.Show("one");
foreach ( var wd in widgets ){
MessageBox.Show("two");

 }

MessageBox.Show ( "один"); появляется. MessageBox.Show ( "два"); никогда не всплывает

Также, что если я хочу увидеть количество виджетов> Я новичок в C # спасибо

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Заменить

MessageBox.Show("one");

от

MessageBox.Show(widgets.Count()); //.Count(), not .Count

Проверьте, есть ли у вас какие-либо элементы для циклического прохождения!

2 голосов
/ 30 ноября 2011

Вы можете заменить ваш запрос LINQ на:

var widgets = from x in loaded.Descendants("widgets").Descendants( "widget" )
          select new
          {
              URL = x.Descendants( "url" ).First().Value,
              Category = x.Descendants( "PortalCategoryId" ).First().Value
          };

UPDATE: Обе версии LINQ должны работать правильно. Моя ошибка, Потомки могут указывать не только на непосредственно вложенные узлы, но и на все узлы в поддереве.

Возможная причина проблемы: Однако имейте в виду, что для отображения второго окна сообщения вам необходимо закрыть первое. Я только что проверил это, и это сработало.

Предлагаемое решение: Чтобы можно было показывать несколько диалогов с сообщениями, вы можете просто создать свой собственный класс формы в проекте, создать его экземпляр и показать его с помощью метода Show () , т.е. Вы можете добавить новую форму Windows , назвать ее MessageForm и использовать следующий код:

//MessageBox.Show(new Form(), "one");
        MessageForm msgDlg = new MessageForm() { Message = "one" };
        msgDlg.Show(this);
        foreach (var wd in widgets)
        {
            //MessageBox.Show(new Form(), "two");
            MessageForm msgDlgS = new MessageForm() { Message = "two" };
            msgDlgS.Show(this);
        }

Он должен работать как задумано.

2 голосов
/ 30 ноября 2011

Если вы попробуете MessageBox.Show(widgets.Count().ToString()), мои ставки скажут 0.Определяется поведение цикла for, чтобы НЕТ итераций в коллекции с 0 элементами.Таким образом, «два» никогда не отображается.

РЕДАКТИРОВАТЬ -

Относительно того, почему это будет ноль, это, очевидно, проблема, если это так!Может быть, вам нужно пройти через from x in loaded.Descendants( "widgets/widget" ) ???

Я не помню, вынуждает ли XDocument проглотить элемент документа или нет, как это делает XMLDocument.

...