基本上,我有一个带有自定义控件的表单(没有别的).自定义控件完全为空,表单将KeyPreview设置为true.
使用此设置,我没有收到任何箭头键或Tab的任何KeyDown事件.键盘上的其他每个键都有效.我有KeyDown事件处理程序连接到具有此类事件的所有内容,因此我确信我没有遗漏任何内容.
另外值得注意的是,如果我删除(完全空)自定义控件,我会得到箭头键事件.
这到底是怎么回事?
编辑:
我将此添加到窗体和控件中,但我仍然没有获得箭头键:
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x100: //WM_KEYDOWN
//this is the control's version. In the form, it's this.Text
ParentForm.Text = ((Keys)m.WParam).ToString();
break;
}
base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)
我还检查了Spy ++,并确定表单本身没有得到任何WM_KEYDOWN消息,它们都是控件.但是,也就是说,控件IS获取箭头键WM_KEYDOWN消息.叹.
编辑2:我还用这个版本更新了ZIP文件.请看看它,如果你想帮忙......
编辑3:
我已经想到了这一点.表格正在吃箭头键,可能是为了保持孩子们的注意力.事实证明,如果表格为空,我会收到事件.
无论如何,如果我将此代码添加到表单中,我会再次开始获取事件:
public override bool PreProcessMessage(ref Message msg) {
switch (msg.Msg) {
case 0x100: //WM_KEYDOWN
return false;
}
return base.PreProcessMessage(ref msg);
}
Run Code Online (Sandbox Code Playgroud)
当我覆盖它时,表单没有机会完成它的脏工作,所以我得到了我期望的KeyDown事件.我认为这样做的副作用是我不能再使用我的键盘来导航表格(在这种情况下不是很大,因为它是一个游戏,这个练习的全部目的是实现键盘导航!)
如果有办法,问题仍然是关于如何"正确"禁用这个问题......
(我希望我正确使用'反转')
我有一组节点(对象)和边(节点所引用的其他对象的列表).整个图表用a表示Dictionary<string, List<string>.
(补充工具栏:有问题的对象不string实际.对象的实际类型无关紧要)
现在,我需要反转图形,所以我没有一个对象列表和它们引用的所有对象,而是有一个对象列表和引用它们的所有对象.
我可以通过循环很容易地做到这一点,但我想有一个更好的方法使用Linq.是这种情况,如果是这样,我该怎么办?
为了确保我们清楚,让我们假装我的数据集看起来像这样:
var graph = new Dictionary<string, List<string>> {
{"A", new string[] { "C", "D" } },
{"B", new string[] { "D" } },
{"C", new string[] { "D" } },
{"D", new string[] { "B" } }, //note that C and D refer to each other
};
Run Code Online (Sandbox Code Playgroud)
我需要将其转化为道德等同于此:
var graph = new Dictionary<string, List<string>> {
{"A", new string[] { } },
{"B", new string[] { "D" } }, …Run Code Online (Sandbox Code Playgroud) 考虑这个ASP.NET MVC 5控制器:
public class MyController : Controller {
public ActionResult Index(int? id) {
ViewBag.MyInt = id;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
而这种观点:
<p>MyInt.HasValue: @MyInt.HasValue</p>
Run Code Online (Sandbox Code Playgroud)
当我调用URL /my/(具有空id)时,我得到以下异常:
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll but was not handled in user code
Additional information: Cannot perform runtime binding on a null reference
Run Code Online (Sandbox Code Playgroud)
相反,如果我在(例如/my/1)中传递ID :
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll but was not handled in user code
Additional information: 'int' does not contain a definition for …Run Code Online (Sandbox Code Playgroud) 我不得不帮助有人删除一个文件夹,里面有奇怪的字符,导致路径重新互换为不同的路径:
c:\test. -> c:\test
Run Code Online (Sandbox Code Playgroud)
我花了一段时间才回想起这个\\?\结构,因为我不知道它叫什么或如何搜索它.但是,一旦我记得它,很容易:
\\?\c:\test. -> c:\test.
Run Code Online (Sandbox Code Playgroud)
这个结构的名称是什么,我(和其他人)可以搜索它?
我有一个Xamarin.iOS项目,我试图上传到iTunes连接.我的部署目标是iOS 8,我将故事板设置为我的启动图像.这在模拟器和设备上都能正常工作.
但是,当我通过Application Loader上传时,我收到此错误:
这令人难以置信的令人沮丧,因为我的理解是这是iOS 7的要求,而不是iOS 8.即使这样,我也试图满足错误无济于事.
我试过了:
8.0为9.0.没什么 - 没什么 - 有帮助.我的智慧结束了,我需要明天提交这件事,否则可能会错过截止日期.
我开始怀疑这实际上不是二进制本身的问题,但我不知道.
我的Info.plist,因为它现在存在:(是的,UILaunchImages部分被注释掉,如上所述它似乎没有区别)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>genome</string>
</array>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>MinimumOSVersion</key>
<string>9.0</string>
<key>CFBundleDisplayName</key>
<string>Intracept</string>
<key>CFBundleIdentifier</key>
<string>com.klick.sensei.intracept</string>
<key>CFBundleVersion</key>
<string>0.2.2</string>
<key>CFBundleIconFiles</key>
<array/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreenIntracept.storyboard</string>
<key>CFBundleShortVersionString</key>
<string>0.2.0</string>
<key>XSAppIconAssets</key>
<string>Resources/Media.xcassets/AppIcons_Intracept.appiconset</string> … 假设我有一个widget类:
struct Widget {
public Color Color { get; set; }
public int Frobbles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要创建一个工厂来创建这些小部件,所以我构建了一个WidgetFactory:
abstract class WidgetFactory {
public virtual Widget GetWidget();
}
Run Code Online (Sandbox Code Playgroud)
事实证明,你可以用几种不同的材料制作小部件,但结果小部件几乎是一样的.所以,我有一些WidgetFactory的实现:
class GoldWidgetFactory : WidgetFactory {
public GoldWidgetFactory(GoldMine goldmine) {
//...
}
public Widget GetWidget() {
Gold g = goldmine.getGold();
//...
}
}
class XMLWidgetFactory : WidgetFactory {
public XMLWidgetFactory(XmlDocument xmlsource) {
//...
}
public Widget GetWidget() {
XmlNode node = //whatever
//...
}
}
class MagicWidgetFactory : WidgetFactory {
public …Run Code Online (Sandbox Code Playgroud) 好的,奇怪的提问时间!
我正在重构一些旧的C++代码,它声明了一堆数组,如下所示:
static SomeStruct SomeStructArray[] = {
{1, 2, 3},
{4, 5, 6},
{NULL, 0, 0}
}
Run Code Online (Sandbox Code Playgroud)
等等.它们分散在源文件中,并在声明它们的地方使用.
但是,我想将它们移动到一个源文件中(主要是因为我想出了一种自动生成它们的方法).当然,我天真地尝试为他们制作标题:
static SomeStruct SomeStructArray[];
Run Code Online (Sandbox Code Playgroud)
实际上,即使我知道这是错的,但无论如何这里是编译错误:
error C2133: 'SomeStructArray' : unknown size arrays.h
error C2086: 'SomeStruct SomeStructArray[]' : redefinition arrays.cpp
Run Code Online (Sandbox Code Playgroud)
所以,我想,这是做正确的方法吗?
所以,我有一个列表视图,如问题标题所示.我已经设置了两个列:Name和Date Modified.这些是在设计器中添加的,这是设计者发出的代码供参考:
// lstFiles
this.lstFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmName,
this.clmDate});
// ...
// clmName
this.clmName.Text = "Name";
this.clmName.Width = 105;
// clmDate
this.clmDate.Text = "Modified";
this.clmDate.Width = 128;
Run Code Online (Sandbox Code Playgroud)
在设计师看来,这看起来很漂亮.
列表项本身是ListViewItem的一个小子类,只是从文件中提取一些元数据(在这种情况下,修改日期),并向自身添加一个子项:
class GalleryItem : ListViewItem {
public string File;
public DateTime DateModified;
public GalleryItem(string file) : base(Path.GetFileNameWithoutExtension(file)) {
this.ImageKey = Path.GetExtension(file);
File = file;
DateModified = System.IO.File.GetLastWriteTime(file);
this.SubItems.Add(DateModified.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
要将项添加到列表中,我只需执行以下操作:
lstFiles.BeginUpdate();
lstFiles.Clear();
foreach (String f in files) {
ListViewItem lvi = new GalleryItem(f);
lvi.Group = lstFiles.Groups["grpFiles"]; //this varries
//omitted: check/add icon …Run Code Online (Sandbox Code Playgroud) 我有一个问题应该让大多数人都去"WTF?",但我仍然拥有它.
我从供应商处获得了大量数据文件.它采用自定义平面文件格式,声称为CSV,但不以逗号分隔,并且不引用值.所以,根本不是真正的CSV.
foo,bar,baz
alice,bob,chris
Run Code Online (Sandbox Code Playgroud)
等等,除了更长,更少有趣.问题是,有些记录嵌入了换行符(!!!):
foo,bar
rab,baz
alice,bob,chris
Run Code Online (Sandbox Code Playgroud)
这应该是每个三个字段的两个记录.通常情况下,我只会说"不,这是愚蠢的.",但我不经意地看得更近了,发现它实际上是一种不同于实际行结束序列的行尾:
foo,bar\n
rab,baz\r\n
alice,bob,chris\r\n
Run Code Online (Sandbox Code Playgroud)
注意第一行上的\n.我已经确定这适用于我发现嵌入式换行的所有情况.所以,我需要基本上做s/\n$//(我尝试了这个特定的命令,它没有做任何事情).
注意:我实际上并不关心字段的内容,因此无需更换换行符.我只需要文件中的每一行都有相同数量的记录(理想情况下,在同一个地方).
我在处理文件的工具中有一个现有的解决方案:
Guid g = Guid.NewGuid();
string data = File.ReadAllText(file, Encoding.GetEncoding("Latin1"));
data = data.Replace("\r\n", g.ToString()); //just so I have a unique placeholder
data = data.Replace("\n", "");
data = data.Replace(g.ToString(), "\r\n");
Run Code Online (Sandbox Code Playgroud)
但是,对于大于千兆字节左右的文件,这会失败.(另外,我没有对它进行分析,但我怀疑它的狗也很慢).
我可以使用的工具是:
做这个的最好方式是什么?
假设您在C#中具有以下结构:
struct Piece : IEquatable<Piece> {
public readonly int size;
public readonly bool[,] data;
public Piece(Piece p) {
size = p.size;
data = (bool[,])p.data.Clone();
}
public Piece(int s, bool[,] d) {
size = s;
if (d.GetLength(0) != s || d.GetLength(1) != s) throw new ArgumentException();
data = (bool[,])d.Clone();
}
public bool Equals(Piece other) {
if (size != other.size) return false;
return (data.Equals(other.data));
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是它代表一组sizex size位代表一个形状(一个位图,如果你愿意的话).
现在,并非所有可能的位组合都有效.我有一些要求:
size位总数.(这很简单,我已经实现了这个)所以,再次假设size==4,以下是好的:
..#.
..#.
.##. …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×2
winforms ×2
area ×1
arrays ×1
arrow-keys ×1
asp.net-mvc ×1
bitmap ×1
boolean ×1
c ×1
explorer ×1
graph-theory ×1
inheritance ×1
interface ×1
ios ×1
linq ×1
listview ×1
newline ×1
nullable ×1
sed ×1
visual-c++ ×1
winapi ×1
windows ×1
xamarin.ios ×1