小编Ped*_*ery的帖子

在同一Windows窗体应用程序的实例之间拖放

我创建了一个小型Windows窗体测试应用程序来尝试一些拖放代码.该表单由三个PictureBoxes组成.我的目的是从一个PictureBox中抓取一张图片,在拖动操作期间将其显示为自定义光标,然后将其放在另一个PictureBox目标上.

只要它们在同一个表单上,这从一个PictureBox到另一个PictureBox就可以正常工作.

如果我打开同一个应用程序的两个实例并尝试在它们之间拖放,我会收到以下神秘错误:

此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的已注册服务器通道,或者此应用程序没有合适的客户端通道与服务器通信.

但是,出于某种原因,它可以拖放到Wordpad(但不是MS Word或画笔).

三个PictureBoxes将它们的事件连接起来如下:

foreach (Control pbx in this.Controls) {
    if (pbx is PictureBox) {
        pbx.AllowDrop = true;
        pbx.MouseDown    += new MouseEventHandler(pictureBox_MouseDown);
        pbx.GiveFeedback += new GiveFeedbackEventHandler(pictureBox_GiveFeedback);
        pbx.DragEnter    += new DragEventHandler(pictureBox_DragEnter);
        pbx.DragDrop     += new DragEventHandler(pictureBox_DragDrop);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是这样的四个事件:

void pictureBox_MouseDown(object sender, MouseEventArgs e) {
    int width = (sender as PictureBox).Image.Width;
    int height = (sender as PictureBox).Image.Height;

    Bitmap bmp = new Bitmap(width, height);
    Graphics g = Graphics.FromImage(bmp);
    g.DrawImage((sender as PictureBox).Image, 0, 0, width, height);
    g.Dispose();
    cursorCreatedFromControlBitmap = CustomCursors.CreateFormCursor(bmp, …
Run Code Online (Sandbox Code Playgroud)

c# drag-and-drop winforms

16
推荐指数
3
解决办法
1万
查看次数

Winforms:如何加速Invalidate()?

我正在GDI +中开发一个保留模式绘图应用程序.应用程序可以将简单的形状绘制到画布并执行基本编辑.执行此操作的数学运算优化到最后一个字节,不是问题.我正在使用内置的Controlstyles.DoubleBuffer绘制一个面板.

现在,如果我在大显示器上运行我的应用程序最大化(在我的情况下为HD),我的问题就出现了.如果我尝试从(大)画布的一角绘制一条线到对角线的另一角,它将开始滞后并且CPU变高.

我的应用中的每个图形对象都有一个边界框.因此,当我使从最大化应用程序的一个角落到对面角落的行的边界框无效时,该边界框几乎与画布一样大.当用户绘制一条线时,这个边界框的失效因此发生在mousemove事件上,并且有明显的滞后可见.如果线是画布上的唯一对象,则也存在此延迟.

我试图在很多方面对此进行优化.如果我画一条较短的线,CPU和滞后就会下降.如果我删除Invalidate()并保留所有其他代码,该应用程序很快.如果我使用Region(仅跨越图形)来使invalidate而不是boundingbox失效,那就慢了.如果我将边界框拆分成一系列背靠背的小方框,从而减少了无效区域,则无法看到可见的性能增益.

因此,我在这里不知所措.如何加快失效?

另外,Paint.Net和Mspaint都有同样的缺点.然而,Word和PowerPoint似乎能够如上所述绘制一条线,没有延迟,也没有CPU负载.因此有可能达到预期的效果,问题是如何?

.net c# gdi+ gdi winforms

8
推荐指数
1
解决办法
6528
查看次数

C#2.0泛型:如何创建零参数的Action对象

首先,我使用的是VS2005和C#2.0.

我正在尝试从SelectedIndexChanged事件中设置一个组合框'Text属性.从StackOverflow上的另一个线程来看,这是通过以下方式完成的:

BeginInvoke(new Action(() => someCombobox.Text = "x" )); 
Run Code Online (Sandbox Code Playgroud)

现在,首先这将为我返回编译器错误.我相信这是因为Action对象在两种语言规范中的行为不同.在C#2.0中,Action对象似乎需要<T>所有声明中的结构.也许我错了,但我想澄清一下.

工作如下:

BeginInvoke(new Action<string>( delegate { someCombobox.Text = "x"; }), new object[] { "" });
Run Code Online (Sandbox Code Playgroud)

但是,我似乎非常奇怪,我必须使用类型参数定义Action对象(特别是因为我不打算传递任何参数)!以某种方式删除此参数也会使空的新对象[]过时,这就是我想要的.

任何人都可以帮我简化上述电话吗?

最后,是否保证BeginInvoke将在SelectedIndexChanged之后完成,从而使用正确的文本更新组合框'Text属性?

我真的很感激能够学习这些问题的答案.

c# generics action .net-2.0 winforms

8
推荐指数
2
解决办法
4989
查看次数

Windows窗体:使光标位图部分透明

我想在拖放操作中使用部分透明的图像.这一切都已设置并且工作正常,但实际转换为透明度有一个奇怪的副作用.出于某种原因,像素似乎与黑色背景混合.

下图描述了该问题:

透明度问题

图a)是原始位图.

图b)是在执行α混合之后产生的.显然,这比预期的50%α滤镜要暗很多.

图c)是所需的效果,图像a)具有50%的透明度(用绘图程序添加到组合物中).

我用来生成trasparent图像的代码如下:

Bitmap bmpNew = new Bitmap(bmpOriginal.Width, bmpOriginal.Height);
Graphics g = Graphics.FromImage(bmpNew);

// Making the bitmap 50% transparent:
float[][] ptsArray ={ 
    new float[] {1, 0, 0, 0, 0},        // Red
    new float[] {0, 1, 0, 0, 0},        // Green
    new float[] {0, 0, 1, 0, 0},        // Blue
    new float[] {0, 0, 0, 0.5f, 0},     // Alpha
    new float[] {0, 0, 0, 0, 1}         // Brightness
};
ColorMatrix clrMatrix = new ColorMatrix(ptsArray);
ImageAttributes imgAttributes = new …
Run Code Online (Sandbox Code Playgroud)

c# gdi+ alphablending cursor winforms

8
推荐指数
1
解决办法
5539
查看次数

我可以实现什么样的酷图形算法?

我打算为我正在开发的应用程序编写一个花哨的(动画的)盒子.由于这是程序员经常被允许发挥和使用代码的地方,我很想知道社区已经实现了什么样的酷算法.

算法可以是动画分形,正弦斑点,火焰,烟雾,粒子系统等.

但是,我想到了一些自然约束:应该可以用几乎任何语言实现算法.因此,不应发布使用大多数语言无法访问的库的高级directx代码或XNA代码.3D是最受欢迎的,但它不应该依赖于大量的额外安装.

如果您可以将图像与代码效果一起发布,那就太棒了.

这是一个很酷的盒子示例,其中包含动画3D图形和标题栏上的一些动画正弦斑点:

Tripex关于盒子

这是Winamp中使用的关于框的图像,包含3D动画:

关于盒子的Winamp

algorithm math graphics visualization effects

8
推荐指数
2
解决办法
1782
查看次数

轻量级网络可视化工具

我一直在努力寻找一种监控家庭网络的工具.在我详细介绍之前,我已经看了很多不同的软件,他们要么是矫枉过正,要么没有我想要的东西.希望社区可以帮助我提供一些建议.

我的网络很小.它由连接到D-Link DI-524路由器的调制解调器组成.对于这个路由器,我有许多无线连接的计算机.

我正在寻找的是一个用于监控流量的轻量级工具.理想的工具将有一个GUI,显示路由器的图标,以及连接到路由器的所有设备的图标,在连接节点的线路上带有带宽指示符.这就是它.

我不确定我的路由器是否有SNMP.这可能是一个交易破坏者,因为许多更便宜的路由器没有.我还读过某些地方可以通过UDP监控许多路由器.

networking wireless router network-monitoring

5
推荐指数
0
解决办法
7625
查看次数

为什么LINQ操作比正常循环更快?

在今天的编程讨论中,我和朋友有点困惑.作为一个例子,我们创建了一个虚构的问题,即具有List<int>n个随机整数(通常为1.000.000)并且想要创建一个函数,该函数返回有多个整数的集合.很简单的东西.我们创建了一个LINQ语句来解决这个问题,以及一个基于普通插入排序的算法.

现在,当我们测试代码运行的速度(使用System.Diagnostics.StopWatch)时,结果令人困惑.LINQ代码不仅优于简单排序,而且运行速度比单个 foreach/for只运行列表的单个循环要快,并且内部没有任何操作(在侧轨上,我认为编译器应该是发现并完全删除).

如果我们List<int>在同一个程序执行中生成一个新的随机数并再次运行LINQ代码,那么性能将提高几个数量级(通常为千倍).空循环的性能当然是相同的.

那么,这里发生了什么?LINQ使用并行性是否优于正常循环?这些结果怎么可能呢?LINQ使用以n*log(n)运行的quicksort,其定义已经慢于n.

第二轮的性能飞跃发生了什么?

我们对这些结果感到困惑和兴趣,并希望从社区中获得一些澄清的见解,只是为了满足我们自己的好奇心.

c# linq sorting algorithm performance

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

netbank登录加密狗如何工作?

这个问题纯粹是为了满足我自己的好奇心.

在挪威,netbanks通常使用所有账户持有人都有的计算器式(物理)加密狗.您在加密狗中键入您的个人PIN,它会生成一个八位数的代码,您可以使用该代码在线登录.设备本身未连接到网络.

谁知道这个系统是如何工作的?

我最好的猜测是每个加密狗都有一个预生成的数字序列存储.因此,如果您键入已使用的数字或未来太远的数字,登录过程将失败.它可能还依赖于内部时钟来生成数字.到目前为止,我的程序员都没有能够回答这个问题.

[编辑]

特别是我很好奇它在挪威如何做到这一点.

security onlinebanking

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

C#属性:它们是如何实例化的?

这可能是一个非常简单的问题,但我正在尝试理解编译的一些内部工作原理.

非常简单地说,想象一个任意对象被实例化.然后在堆上分配此对象.该对象具有PointF类型的属性(值类型),具有get和set方法.

想象一下get和set方法包含一些用于完成工作的计算.如何以及在何处(堆栈/堆)以及何时实例化此代码?


这是这个问题的背景:

我正在为一个对象编写get和set方法,并且需要非常频繁地访问这些方法.get和set代码本身相当庞大,所以我担心在最糟糕的情况下,这些方法会被实例化为一个对象或一个值类型,每个内部代码都可以访问该属性.另一方面,代码可能在创建主对象时被实例化,并且简单地告诉CPU将jmp指向属性代码start.无论如何,这是我想澄清的.

.net compilation properties

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