小编Cli*_*rce的帖子

为图形的Y轴选择有吸引力的线性刻度

我正在编写一些代码来在我们的软件中显示条形图(或线条).一切都很顺利.令我难过的是标记Y轴.

调用者可以告诉我他们想要Y标记的标记有多精细,但我似乎仍然坚持要以"有吸引力"的方式标记它们.我无法描述"有吸引力",也许你也不能,但是当我们看到它时我们就知道了,对吗?

所以如果数据点是:

   15, 234, 140, 65, 90
Run Code Online (Sandbox Code Playgroud)

并且用户在Y轴上要求10个标签,用纸和铅笔进行一点点处理:

  0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250
Run Code Online (Sandbox Code Playgroud)

那里有10个(不包括0),最后一个延伸超过最高值(234 <250),并且它是一个"好"的增量,每个增加25.如果他们要求8个标签,那么30的增量看起来不错:

  0, 30, 60, 90, 120, 150, 180, 210, 240
Run Code Online (Sandbox Code Playgroud)

九会很棘手.也许只是使用了8或10,并将其称为足够接近就可以了.当一些观点是否定的时候该怎么办?

我可以看到Excel很好地解决了这个问题.

有没有人知道解决这个问题的通用算法(甚至有些蛮力没问题)?我不必快速做,但它应该看起来不错.

algorithm math graph

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

如何等到远程.NET调试器附加

今天我遇到了一个问题,我需要远程调试一个程序.该程序是从另一个系统启动的,所以我真的没有机会在命令行上与它进行交互.我可以轻松改变它的来源.

我需要做的是让程序正常启动,然后等待我用调试器连接它.我无法想出办法让我开心.我找到了错误,但没有调试器的帮助.

while(true) { }
Run Code Online (Sandbox Code Playgroud)

保持进程活着,然后我可以用调试器"设置下一个语句",但它看起来很尴尬和粗鲁.

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

看起来很奇怪,因为实际上没有一个控制台供我输入.(它也没有用.设置下一个语句然后运行会带你回到ReadLine()等待.)

那么我可以在.NET/CLR/C#程序中插入什么样的代码来说"在这里等到我可以用调试器附加"?

.net debugging remote-debugging breakpoints

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

使用C#/ Windows Forms的简单动画

我需要在C#/ Windows Forms中敲出一个快速动画来进行万圣节显示.只是一些2D形状在坚实的背景上移动.由于这只是一个快速的一次性项目,我真的不想安装和学习一整套新的工具.(DirectX开发工具包,Silverlight,Flash等.)我还必须在多台计算机上安装它,因此除了基本的.Net框架(2.0)之外的任何东西都会让人痛苦.

对于工具,我有VS2k8,25年的开发经验,独轮车,大屠杀斗篷,大约2天就可以解决这个问题.自从在我的Atari 130XE上使用汇编程序以来,我没有完成动画(对于页面翻转和播放器/导弹图形来说很好!)

建议吗?以下是我想知道的一些事情:

  • 我可以通过摆弄它的OnPaint处理程序来绘制任何空的小部件(如面板),对吗?这就是我绘制自定义小部件的方式.有没有比这更好的技术?
  • 在Windows窗体中是否存在针对此类事物的页面翻转技术?我不是在寻找高帧速率,只需要根据需要进行少量闪烁/绘图.

谢谢.

Post Mortem Edit ..."几天后编码"

好吧,项目已经完成.下面的链接派上用场,虽然其中有几个是404.(我希望SO允许不止一个回复被标记为"正确").我必须克服的最大问题是闪烁,当我试图直接在表单上绘制时,这是一个持久的错误.

  • 使用Form的OnPaint事件:坏主意.我从来没有这样做过; 许多神秘错误(堆栈溢出或ArgumentNullExceptions).我最后使用一个尺寸适合填充表格的面板,工作正常.
  • 无论如何,使用OnPaint方法很慢.我在网上看到,构建PaintEventArgs的速度很慢,并且他们不是在开玩笑.当我抛弃它时,很多闪烁消失了.跳过OnPaint/Invalidate()并自己绘制它.
  • 设置表单上的所有"双缓冲"选项仍然留下一些必须修复的闪烁.(我发现有冲突的文档说"将它们设置在控件上"并"将它们设置在窗体上".好的控件没有.SetStyle()方法.)我没有测试它们,所以它们可能是做某事(this是形式):

        this.SetStyle(ControlStyles.UserPaint, true);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    
    Run Code Online (Sandbox Code Playgroud)

所以代码的主力看起来像(pf是面板控件):

    void PaintPlayField()
    {
        Bitmap bufl = new Bitmap(pf.Width, pf.Height);
        using (Graphics g = Graphics.FromImage(bufl))
        {
            g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pf.Width, pf.Height));
            DrawItems(g);
            DrawMoreItems(g);
            pf.CreateGraphics().DrawImageUnscaled(bufl, 0, 0);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我刚从Timer循环内部调用了PaintPlayField.根本没有闪烁.

.net c# animation winforms

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

在.NET/C#test中,如果进程具有管理权限

是否有一种规范的方法来测试该进程是否具有计算机的管理权限?

我将开始一个长期运行的过程,并且在此过程的生命周期中,它会尝试一些需要管理员权限的事情.

如果流程具有这些权利而不是以后,我希望能够预先测试.

.net c# windows security

49
推荐指数
3
解决办法
5万
查看次数

在C#中将字符串转换为画笔/画笔颜色名称

我有一个配置文件,开发人员可以通过传入一个字符串来指定文本颜色:

 <text value="Hello, World" color="Red"/>
Run Code Online (Sandbox Code Playgroud)

而不是有一个巨大的开关语句寻找所有可能的颜色,只是使用类System.Drawing.Brushes中的属性而不是内部我可以这样说:

 Brush color = Brushes.Black;   // Default

 // later on...
 this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));
Run Code Online (Sandbox Code Playgroud)

除了刷子/画笔中的值不是枚举.所以Enum.Parse没有给我带来快乐.建议?

.net c# graphics brush colors

38
推荐指数
4
解决办法
8万
查看次数

需要在Windows C#/.Net中禁用屏幕保护程序/屏幕锁定

对于特定的应用程序,我需要在屏幕保护程序运行时禁用它.操作员可以手动将其关闭,然后再打开,但最简单的方法是在应用程序运行时保持屏幕保护程序不受影响.

我该怎么做呢?我找到了用SPI_SETSCREENSAVEACTIVE实际关闭屏幕保护程序的代码,但我不认为这就是我想要的.

c# screensaver

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

使用SQL Server进行应用程序日志记录.优点缺点?

我有一个多用户应用程序,它为活动保留了一个集中的日志文件.现在,日志记录进入文本文件大约10MB-50MB /天.记录器每天轮换文本文件,我们保留过去4或5天的价值.比这更老的我们没兴趣.

它们很少被阅读:在开发应用程序以获取错误消息,诊断消息时,或者在应用程序处于生产状态时,对用户报告的问题或错误进行分类.

(这严格来说是应用程序日志.安全日志记录保存在别处.)

但是当他们被阅读时,他们就是痛苦的屁股.即使使用Perl,使用10MB文本文件也很有趣:文件中的字段(事务ID,用户ID等)很有用,但只是文本.消息是按顺序写入的,一次一个地写入,因此当尝试跟踪特定事务或用户时,交错活动全部混淆.

我正在寻找关于这个主题的想法.有人用SQL数据库完成了应用程序级日志记录并喜欢它吗?讨厌吗?

sql logging text-files

21
推荐指数
3
解决办法
7902
查看次数

如何释放c 2d阵列

我有以下代码:

int **ptr = (int **)malloc(sizeof(int*)*N); 
for(int i=0;i<N;i++) 
     ptr[i]=(int*)malloc(sizeof(int)*N));
Run Code Online (Sandbox Code Playgroud)

我怎样才能免费使用ptr free?我应该循环ptr和free ptr [i]吗?或者只是做

free(ptr) 
Run Code Online (Sandbox Code Playgroud)

和ptr将被释放?

c memory-management

19
推荐指数
4
解决办法
5万
查看次数

强迫Linq不要延迟执行

事实上,这是与这篇文章相同的问题:

如何在我的DAL中调用时确保我的LINQ查询执行,而不是以延迟的方式执行?

但由于他没有解释为什么他想要它,这个问题似乎已经过了一段时间.这是我类似但更好解释的问题:

我有两种类型的线程(暂时忽略UI线程).有一个"数据收集"线程类型和一个"计算"线程类型.数据收集线程很慢.从各个地方筛选出相当多的数据.计算线程相对较快.到目前为止,设计模型是发送数据收集线程以查找数据,并在完成时将数据传递给计算.

当我在Linq编写数据采集时,我将一些缓慢的内容提升回计算线程.现在有数据元素在计算过程中使用之前没有完全解析 - 这是一个问题.

我想迫使Linq在一定时间内完成工作(声明结束?方法结束?"请完成,该死的"方法调用)以便我知道我以后不会付钱.将".ToList()"添加到Linq的末尾是1.尴尬,并且2.感觉就像拳击即将在另一个线程中暂时取消装箱的东西.

c# linq delayed-execution

18
推荐指数
2
解决办法
9842
查看次数

jQuery处理焦点并单击元素

我正在尝试确定微调数据输入Web应用程序的工作流程.在单个网页上显示几个地址表单:

  1. Name___________
     Street_________
     Phone__________

  2. Name___________
     Street_________
     Phone__________

  [...many more...]
Run Code Online (Sandbox Code Playgroud)

现在我想知道用户是否正在使用tab键进入第二个"Name"字段(或该记录中的任何位置),或者他们是否使用鼠标点击它.(或移位标签反向移动.)

我在焦点和点击上为输入字段设置了一个处理程序:

$('input').click(function() { TabulateClick(this) });
$('input').focus(function() { TabulateFocus(this) });
Run Code Online (Sandbox Code Playgroud)

在处理程序中,我确定用户正在处理哪个地址以及我们是否"切换"了地址记录.(如果焦点位于第一个地址的"电话"中,并且您单击同一地址中的"名称"字段,那么实际上并未切换记录,因此我不会将其列表.)

    function TabulateClick(field)
    {
         var currentAddressRecord = FindAddress(field);
         if ( lastAddressRecord != currentAddressRecord )
             switchedAddressesWithClick++;
         lastAddressRecord = currentAddress;
    }
    function TabulateFocus(field)
    {
         var currentAddress = FindAddress(field);
         if ( lastAddressRecord != currentAddressRecord )
             switchedAddressesWithTab++;
         lastAddressRecord = currentAddress;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是当我鼠标点击进入该字段时,focus事件将首先触发一个false switchedAddressesWithTab并更改currentAddress(这是坏的).当click处理器运行时,lastAddressRecord是被宠坏的.

focus处理程序内部是否有一种方法可以知道click同一对象上有待处理的事件?或者在click处理程序中知道它以前刚刚处理过focus

javascript mouse jquery events focus

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