小编Mik*_*ron的帖子

箭头键事件未到达

基本上,我有一个带有自定义控件的表单(没有别的).自定义控件完全为空,表单将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事件.我认为这样做的副作用是我不能再使用我的键盘来导航表格(在这种情况下不是很大,因为它是一个游戏,这个练习的全部目的是实现键盘导航!)

如果有办法,问题仍然是关于如何"正确"禁用这个问题......

c# custom-controls arrow-keys winforms

6
推荐指数
1
解决办法
3135
查看次数

反转图表

(我希望我正确使用'反转')

我有一组节点(对象)和边(节点所引用的其他对象的列表).整个图表用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)

c# linq graph-theory

5
推荐指数
1
解决办法
232
查看次数

当我为ViewBag分配一个可以为空的整数时,它会使值无法取消?

考虑这个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# asp.net-mvc nullable asp.net-mvc-5

5
推荐指数
1
解决办法
2576
查看次数

Windows中"\\?\"构造的名称是什么?

我不得不帮助有人删除一个文件夹,里面有奇怪的字符,导致路径重新互换为不同的路径:

c:\test.     -> c:\test
Run Code Online (Sandbox Code Playgroud)

我花了一段时间才回想起这个\\?\结构,因为我不知道它叫什么或如何搜索它.但是,一旦我记得它,很容易:

\\?\c:\test. -> c:\test.
Run Code Online (Sandbox Code Playgroud)

这个结构的名称是什么,我(和其他人)可以搜索它?

windows explorer winapi

5
推荐指数
1
解决办法
99
查看次数

错误ITMS-90096 - 缺少iOS 7的启动映像

我有一个Xamarin.iOS项目,我试图上传到iTunes连接.我的部署目标是iOS 8,我将故事板设置为我的启动图像.这在模拟器和设备上都能正常工作.

但是,当我通过Application Loader上传时,我收到此错误:

ITMS-90022:您的二进制文件未针对iPhone 5进行优化

这令人难以置信的令人沮丧,因为我的理解是这是iOS 7的要求,而不是iOS 8.即使这样,我也试图满足错误无济于事.

我试过了:

  • 在我的root中放入一个Default-568h@2x.png文件
  • 修改我的Info.plist以直接引用该文件
  • 将其放入Launch Images资产目录中
  • 在它旁边添加一个Default@2x.png文件,以防万一
  • 从Info.plist中删除引用,并依赖旧的默认值
  • 将最低操作系统版本从更改8.09.0.
  • 在每一步中,检查生成的IPA以验证我所做的更改

没什么 - 没什么 - 有帮助.我的智慧结束了,我需要明天提交这件事,否则可能会错过截止日期.

我开始怀疑这实际上不是二进制本身的问题,但我不知道.

我的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> …

itunesconnect xamarin.ios ios

5
推荐指数
1
解决办法
706
查看次数

接口与继承:在这种情况下哪个更好?

假设我有一个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# inheritance interface

4
推荐指数
1
解决办法
253
查看次数

C头中的全局数组?

好的,奇怪的提问时间!

我正在重构一些旧的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)

所以,我想,这是做正确的方法吗?

c arrays global-variables visual-c++

4
推荐指数
1
解决办法
6065
查看次数

为什么我的ListView没有正确显示详细信息视图?

所以,我有一个列表视图,如问题标题所示.我已经设置了两个列: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)

.net c# listview winforms

4
推荐指数
1
解决办法
4840
查看次数

如何从文件中删除\n字符?

我有一个问题应该让大多数人都去"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)

但是,对于大于千兆字节左右的文件,这会失败.(另外,我没有对它进行分析,但我怀疑它的狗也很慢).

我可以使用的工具是:

  • cygwin工具(sed,grep等)
  • .净

做这个的最好方式是什么?

.net c# newline sed

4
推荐指数
1
解决办法
1661
查看次数

如何验证2d位图是否连续?

假设您在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位代表一个形状(一个位图,如果你愿意的话).

现在,并非所有可能的位组合都有效.我有一些要求:

  1. 必须只有size位总数.(这很简单,我已经实现了这个)
  2. 所有位必须是连续的.

所以,再次假设size==4,以下是好的:

..#.
..#.
.##. …
Run Code Online (Sandbox Code Playgroud)

c# boolean bitmap area

2
推荐指数
1
解决办法
296
查看次数