C# 如何获取计数并弹出消息框
我试图让messagebox显示元素,但运行应用程序时messagebox不会弹出C# 如何获取计数并弹出消息框,c#,visual-studio-2010,c#-4.0,C#,Visual Studio 2010,C# 4.0,我试图让messagebox显示元素,但运行应用程序时messagebox不会弹出 string xml = @"<?xml version='1.0' encoding='UTF-8'?> <widgets> <widget> <url>~/Portal/Widgets/ServicesList.ascx</url> <castAs>ServicesWidget</castAs
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.Showone;出现了。
MessageBox.showtoo;永远不会出现
还有,如果我想看一些小部件>我是C新手该怎么办
谢谢如果您尝试MessageBox.Showwidgets.Count.ToString我打赌它会显示0。for循环的行为定义为对包含0个元素的集合不进行迭代。因此,永远不会显示两个
编辑-
至于为什么会是零,如果是的话,这显然是个问题!也许你需要在加载的小部件/小部件中从x循环通过
我不记得XDocument是否强迫您吞下document元素,或者与XMLDocument不同。如果您尝试MessageBox.Showwidgets.Count.ToString,我打赌它将显示0。for循环的行为定义为对包含0个元素的集合不进行迭代。因此,永远不会显示两个
编辑-
至于为什么会是零,如果是的话,这显然是个问题!也许你需要在加载的小部件/小部件中从x循环通过
我不记得XDocument是迫使您吞咽document元素还是不像XMLDocument那样
MessageBox.Show("one");
借
检查是否有任何元素要循环 更换
MessageBox.Show("one");
借
检查是否有任何元素要循环 您可以将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
};
更新:
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);
}
它应该可以正常工作。您可以将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
};
更新:
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);
}
它应该按预期的那样工作。您是否尝试使用调试器进行调试?是否出现错误?您使用的是控制台应用程序吗?我用NUnit中运行的console.WriteLine替换了MessageBox调用,此代码按预期运行了两次。您是否尝试使用调试器逐步执行?是否出现错误?您正在使用控制台应用程序吗?我用NUnit中运行的console.WriteLine替换了MessageBox调用,该代码按预期运行了2次。