我写了一个方法来处理一个comboBox的SelectedIndexChanged事件.
在构造函数中,我填充了comboBox,这激活了我的事件处理方法.我不想要,因为没有人点击comboBox.
除非用户点击它,否则有一种简单的方法可以让comboBox不触发事件?
如果那是不可能的,有没有办法暂时将事件与方法断开连接?我可以设置"my_combo.SelectedIndexChanged = null"然后创建一个新的System.EventHandler吗?
或者我想我可以创建某种布尔成员变量,我可以打开或关闭并在我的方法中放置分支检查.不过,这看起来像是一块垃圾.
我在MSDN上找到了这个示例,它显示了一些配置文本块的方法:
很多它似乎对我有用,但这部分失败了:
textBlock.Background = Brushes.AntiqueWhite;
Run Code Online (Sandbox Code Playgroud)
"背景"部分用红色标出,Visual Studio说:"Windows.UI.Xaml.Controls.TextBlock不包含Background的定义".
我很困惑.
这是最近的变化吗?或者这是否会在以后删除?
我无法摆脱这个桌边.
最初的HTML/CSS来自ASP.NET MVC默认值.
我删除了很多代码并在顶部添加了一个表.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<body>
<div class="page">
<table border=0 width=1000 style="border-collapse:collapse;" cellspacing="0" cellpadding="0">
<tr>
<td rowspan=2>
<img src="/Content/Images/elk_banner.jpg" />
</td>
<td>
<div id="logindisplay">
@Html.Partial("_LogOnPartial")
</div>
</td>
</tr>
</table>
<section id="main">
@RenderBody()
</section>
<footer>
</footer>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我试过评论所有的CSS,但我无法摆脱它.
我唯一的猜测是,其中一个神秘的.js文件正在干扰它.或者这些奇特的HTML容器之一就是这样做的.
任何猜测?我用Google搜索,但无济于事.我想这是我忽略的小事.
我已经能够成功地将模型返回到视图并以强类型的方式显示结果.
我从未见过返回多个模型的示例.我该怎么做?
我想控制器会有这样的东西:
return View(lemondb.Messages.Where(p => p.user == tmp_username).ToList(), lemondb.Lemons.Where(p => p.acidity >= 2).ToList());
Run Code Online (Sandbox Code Playgroud)
MVC是否允许您返回多个模型?
然后在视图中我在文件顶部有这一行:
@model IEnumerable<ElkDogTrader.Models.Message>
Run Code Online (Sandbox Code Playgroud)
我经常在视图中调用"模型".
@foreach (var item in Model)
Run Code Online (Sandbox Code Playgroud)
如果有2个模型,我将如何单独引用它们?
这可能是多个模型,或者这就是为什么人们使用ViewBag和ViewData?
如何以编程方式将带换行符的文本添加到文本块?
如果我插入这样的文字:
helpBlock.Text = "Here is some text. <LineBreak/> Here is <LineBreak/> some <LineBreak/> more.";
Run Code Online (Sandbox Code Playgroud)
然后,换行符被解释为字符串文字的一部分.我希望它更像是如果我在XAML中拥有它会发生什么.
我似乎无法用WPF方式做到这一点:
helpBlock.Inlines.Add("Here is some content.");
Run Code Online (Sandbox Code Playgroud)
由于Add()方法想要接受"inline"类型的对象.
我无法创建一个Inline对象并将其作为参数传递,因为它由于其保护级别而"无法访问:
helpBlock.Inlines.Add(new Windows.UI.Xaml.Documents.Inline("More text"));
Run Code Online (Sandbox Code Playgroud)
我没有看到以编程方式添加运行的方法.
我可以找到大量的WPF示例,但WinRT没有.
我也发现了很多XAML示例,但C#中没有任何示例.
假设我有一些字符串:
string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
Run Code Online (Sandbox Code Playgroud)
有什么区别:
string startsWithO = strings.First(s => s[0] == 'o');
Run Code Online (Sandbox Code Playgroud)
和:
string startsWithO = strings.Where(s => s[0] == 'o').First();
Run Code Online (Sandbox Code Playgroud)
由于Where()被推迟,它不应该减慢执行速度,对吗?
这看起来应该很容易,但我已经尝试了三到四种方法(但无济于事).
我只是想在查看包中放置一个查询结果并显示它.
我试过在ViewBag中放置一个模型对象列表:
var mesg = from MSG in lemondb.Messages
where MSG.msg == Membership.GetUser().ToString()
select MSG;
ViewBag.messages = MSG;
Run Code Online (Sandbox Code Playgroud)
然后我尝试用.cshtml吐出来:
var message = (List<LemonTrader.Models.Message>)ViewBag.messages; // <--- fails here because it is a string
foreach ( var MSG in message )
{
@Html.Label(MSG.msg)<br />
}
Run Code Online (Sandbox Code Playgroud)
但它说:
无法将类型'System.Data.Entity.Infrastructure.DbQuery'转换为'System.Collections.Generic.List'
所以我似乎正在使用错误的模板.我如何吐出System.Entity.Infrastructure.DbQuery?
我也尝试将结果作为字符串列表通过Viewbag传递.(这是一种更糟糕的方式吗?)
var mesg = from MSG in lemondb.Messages
where MSG.msg == Membership.GetUser().ToString()
select MSG.msg;
ViewBag.messages = mesg;
Run Code Online (Sandbox Code Playgroud)
并将其作为字符串列表吐出:
foreach (var atext in ViewBag.messages as List<string>) { // gets hung up on foreach here …
Run Code Online (Sandbox Code Playgroud) 我试图使用powershell递归地找到一行代码.
要在已知文件中查找"TODO"行,我可以这样做:
get-content ActivityLibrary\Accept.cs | select-string TODO
Run Code Online (Sandbox Code Playgroud)
但我不想显式键入每个目录\文件.我想从get-childitem管道一系列文件名,如下所示:
gci -filter *.cs -name -recurse | gc | select-string TODO
Run Code Online (Sandbox Code Playgroud)
但后来我看到了这个错误:
Get-Content:输入对象不能绑定到comman d的任何参数,因为该命令不接受管道输入或输入及其属性与接受管道输入的任何参数都不匹配.在行:1字符:37
我究竟做错了什么?
我正在通过MS 101 Linq教程编写代码.
我尝试重构查询lambda /方法语法(反之亦然).这对我来说是一个挑战.
给定的查询是:
var custSupQuery =
from sup in suppliers
join cust in customers on sup.Country equals cust.Country into cs
select new { Key = sup.Country, Items = cs };
Run Code Online (Sandbox Code Playgroud)
我改写的是这样的:
var custSupQuery = suppliers.Join(customers, s => s.Country, c => c.Country, (c, s) => new { Key = s.Country, Items = s, Items2 = c });
Run Code Online (Sandbox Code Playgroud)
(我没有看到在新子句中将这些字段组合成两种类型的简单方法,因此我将它们分开).
这似乎与编译器一起飞行,直到它到达显示循环.第二个foreach似乎无法处理这种类型.
这是显示代码(使用查询表达式但不使用lambda /方法语法):
foreach (var item in custSupQuery)
{
Console.WriteLine(item.Key + ":");
foreach (var element in item.Items) // …
Run Code Online (Sandbox Code Playgroud) 我已经看到了很多涉及数据绑定的解决方案,但我没有数据源.在这种情况下,组合单元格仅适用于1行(其他行没有DataGridViewComboBoxCell).
我像这样设置DataGridViewComboCell:
DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell();
cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
cell.Items.AddRange(items.ToArray()); // items is List<string>
Run Code Online (Sandbox Code Playgroud)
我会像以后一样动态重新填充它:
_cell.Items.Clear();
_cell.Items.AddRange(this.Data.ResponseOptions.Select( d => d.Description).ToArray());
//d.Description is of type string
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个讨厌的对话框,上面写着:
DataGridView中发生以下异常:System.ArgumentException:DataGridViewComboBoxCell值无效.要替换此默认对话框,请处理DataError事件.
顺便说一下,它说它不是"有效"也没什么用.向MS发送电子邮件说Windows Forms无效是公平的吗?
我试过抓住单元格的items属性并使用带有Add()调用的foreach()添加字符串.我仍然得到对话框.
每次我想要更新它并从头开始重新创建一个新的DataGridViewComboCell时,我也试过吹掉整个单元格.我仍然得到对话框.
我也试过手动覆盖列值(当我没有这个问题时成功).但是没有解决它.
当我试图重新填充组合单元格中的项目时,我似乎只得到了这个对话框.
现在我刚刚删除了DataError方法.
有什么建议?
c# ×4
.net ×2
linq ×2
winforms ×2
winrt-xaml ×2
asp.net-mvc ×1
c#-3.0 ×1
combobox ×1
css ×1
datagridview ×1
events ×1
html ×1
powershell ×1
xaml ×1