小编sta*_*ica的帖子

将鼠标事件传递给父控件

环境:.NET Framework 2.0,VS 2008.

我试图创建将通过某些鼠标事件(一定的.NET控件(标签,面板)的子类MouseDown,MouseMove,MouseUp)到它的父控制(或可替换地到顶层形式).我可以通过在标准控件的实例中为这些事件创建处理程序来实现此目的,例如:

public class TheForm : Form
{
    private Label theLabel;

    private void InitializeComponent()
    {
        theLabel = new Label();
        theLabel.MouseDown += new MouseEventHandler(theLabel_MouseDown);
    }

    private void theLabel_MouseDown(object sender, MouseEventArgs e)
    {
        int xTrans = e.X + this.Location.X;
        int yTrans = e.Y + this.Location.Y;
        MouseEventArgs eTrans = new MouseEventArgs(e.Button, e.Clicks, xTrans, yTrans, e.Delta);
        this.OnMouseDown(eTrans);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法将事件处理程序移动到控件的子类中,因为引发父控件中的事件的方法受到保护,并且我没有父控件的限定符:

无法System.Windows.Forms.Control.OnMouseDown(System.Windows.Forms.MouseEventArgs)通过类型的限定符访问受保护的成员System.Windows.Forms.Control; 限定符必须是类型TheProject.NoCaptureLabel(或从中派生).

我正在研究覆盖WndProc我的子类中的控制方法,但希望有人可以给我一个更清洁的解决方案.

c# mouseevent winforms

32
推荐指数
2
解决办法
6万
查看次数

实现一个不可变的deque作为平衡的二叉树?

我一直在考虑如何将deque(即双端队列)实现为不可变数据结构.

似乎有不同的方法来做到这一点.AFAIK,不可变数据结构通常是分层的,因此在修改诸如插入或删除项之类的操作之后,可以重用它的主要部分.

Eric Lippert 在他的博客上有两篇 关于这个主题的文章,以及C#中的示例实现.

他的两个实现都让我觉得比实际需要更精细.难道deques只能被实现为二叉树,其中元素只能在树的"左"()和非"右"(后面)插入或删除?

                               o
                              / \
                             …   …
                            /     \
                           …       …
                          / \     / \
              front -->  L   …   …   R  <-- back
Run Code Online (Sandbox Code Playgroud)

此外,树将与旋转保持合理平衡:

  • 在插入前部或从背部移除时右旋转,和
  • 从前面移开或在后面插入时左旋转.

在我看来,Eric Lippert是一个非常聪明的人,我非常尊重他,但他显然没有考虑这种方法.因此我想知道,这是有充分理由的吗?我建议的实施dequesnaïve的方法吗?

functional-programming immutability deque data-structures

30
推荐指数
3
解决办法
3074
查看次数

CQRS中的验证是否必须在UI中单独进行一次,在业务域中进行一次?

我最近阅读了文章CQRSàlaGreg Young,我仍然试图了解CQRS.

我不确定输入验证应该在哪里发生,以及它是否可能发生在两个不同的位置(从而违反了"不重复自己"规则,可能还包括"关注点分离").

鉴于以下应用程序架构:

#      +--------------------+           ||
#      |    event store     |           ||
#      +--------------------+           ||
#           ^          |                ||
#           |  events  |                ||
#           |          v                  
#      +--------------------+         events         +--------------------+
#      |      domain/       | ---------------------> |   (denormalized)   |
#      |  business objects  |                        |  query repository  |
#      +--------------------+           ||           +--------------------+
#         ^   ^   ^   ^   ^             ||                      |
#         |   |   |   |   |             ||                      |
#      +--------------------+           ||                      |
#      |    command bus     | …
Run Code Online (Sandbox Code Playgroud)

validation dry separation-of-concerns cqrs

30
推荐指数
1
解决办法
2465
查看次数

如何对集合进行排序?

有谁知道如何在VBA中对集合进行排序?

collections vba

28
推荐指数
6
解决办法
8万
查看次数

是否可以解释C#表达式树来发出JavaScript?

例如,如果你有一个这样的表达式:

Expression<Func<int, int>> fn = x => x * x;
Run Code Online (Sandbox Code Playgroud)

是否有任何东西会遍历表达式树并生成它?

"function(x) { return x * x; }"
Run Code Online (Sandbox Code Playgroud)

javascript c# transformation expression-trees

28
推荐指数
2
解决办法
3662
查看次数

对象持久性术语:'存储库'与'存储'对比'上下文'与'检索者'对比(...)

我不确定在设计程序的数据访问层(DAL)时如何命名数据存储类.

(通过数据存储类,我的意思是一个类,负责将持久化对象读入内存,或者持久保存内存中对象.)

根据两件事命名数据存储类似乎是合理的:

  • 它处理的物品类型;
  • 是否加载和/或持久存在此类对象.

Banana可以调用加载对象的类,例如BananaSource.

我不知道如何处理第二点(即Source示例中的位).我见过不同的名词显然是出于这个目的使用的:

  • 存储库:听起来很一般.这是否表示可读/写可访问的内容?
  • store:这听起来像是可能允许写访问的东西.
  • 上下文:听起来非常抽象.我用LINQ和对象关系映射器(ORM)看过这个.
    PS(几个月后):这可能适用于包含"活动"或其他监督对象的容器(工作单元模式会浮现在脑海中).
  • 猎犬:听起来像只读的东西.
  • source&sink:可能不适合对象持久性; 更适合数据流?
  • 读者/作者:其意图非常清楚,但听起来对我来说太技术了.

这些名称是否是任意的,或者每个名称背后是否有广泛接受的含义/语义差异?更具体地说,我想知道:

  • 只读数据存储的名称是什么?
  • 什么名称适用于只写数据存储?
  • 对于偶尔更新的大多数只读数据存储,哪些名称适合?
  • 对于偶尔读取的大多数只写数据存储,哪些名称适合?
  • 一个名字是否同样适合所有场景?

persistence datasource terminology data-access-layer naming-conventions

27
推荐指数
1
解决办法
5764
查看次数

我可以在.NET 4中序列化ExpandoObject吗?

我正在尝试使用,System.Dynamic.ExpandoObject所以我可以在运行时动态创建属性.稍后,我需要传递此对象的实例,并且使用的机制需要序列化.

当然,当我尝试序列化我的动态对象时,我得到了异常:

System.Runtime.Serialization.SerializationException未处理.

在Assembly'System.Core中输入'System.Dynamic.ExpandoObject',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化.

我可以序列化ExpandoObject吗?是否有另一种方法来创建可序列化的动态对象?也许使用DynamicObject包装器?

我创建了一个非常简单的Windows窗体示例来复制错误:

using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Dynamic;

namespace DynamicTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {            
            dynamic dynamicContext = new ExpandoObject();
            dynamicContext.Greeting = "Hello";

            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream("MyFile.bin", FileMode.Create,
                                           FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, dynamicContext);
            stream.Close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# serialization dynamic expandoobject

27
推荐指数
3
解决办法
2万
查看次数

如何使用反射获得泛型类型的正确文本定义?

我正致力于代码生成,并遇到了泛型问题.这是导致我问题的"简化"版本.

Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>();
string text = dictionary.GetType().FullName;
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段,其值text如下:

 System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, 
 Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, 
 Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Run Code Online (Sandbox Code Playgroud)

(添加了换行符以提高可读性.)

有没有办法type在不解析上面的字符串的情况下以不同的格式获取类型name()?我希望得到以下结果text:

System.Collections.Generic.Dictionary<System.String, System.DateTime>
Run Code Online (Sandbox Code Playgroud)

c# generics reflection

26
推荐指数
2
解决办法
4918
查看次数

如何使用Dir类删除非空目录?

Dir.delete("/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh")  
Run Code Online (Sandbox Code Playgroud)

导致此错误:

目录不空 - /usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh

即使目录仍包含文件,如何删除目录?

ruby

26
推荐指数
2
解决办法
2万
查看次数

.NET Core中的跨平台文件名处理

如何以System.IO跨平台的方式处理类中的文件名,使其在Windows和Linux上运行?

例如,我编写的这段代码在Windows上完美运行,但它不会在Ubuntu Linux上创建文件:

var tempFilename = $@"..\Data\uploads\{filename}";
using (FileStream fs = System.IO.File.Create(tempFilename))
{
    file.CopyTo(fs);
    fs.Flush();                    
}
Run Code Online (Sandbox Code Playgroud)

c# linux .net-core

24
推荐指数
4
解决办法
2万
查看次数