我正在编写一些代码来在我们的软件中显示条形图(或线条).一切都很顺利.令我难过的是标记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很好地解决了这个问题.
有没有人知道解决这个问题的通用算法(甚至有些蛮力没问题)?我不必快速做,但它应该看起来不错.
今天我遇到了一个问题,我需要远程调试一个程序.该程序是从另一个系统启动的,所以我真的没有机会在命令行上与它进行交互.我可以轻松改变它的来源.
我需要做的是让程序正常启动,然后等待我用调试器连接它.我无法想出办法让我开心.我找到了错误,但没有调试器的帮助.
while(true) { }
Run Code Online (Sandbox Code Playgroud)
保持进程活着,然后我可以用调试器"设置下一个语句",但它看起来很尴尬和粗鲁.
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
看起来很奇怪,因为实际上没有一个控制台供我输入.(它也没有用.设置下一个语句然后运行会带你回到ReadLine()等待.)
那么我可以在.NET/CLR/C#程序中插入什么样的代码来说"在这里等到我可以用调试器附加"?
我需要在C#/ Windows Forms中敲出一个快速动画来进行万圣节显示.只是一些2D形状在坚实的背景上移动.由于这只是一个快速的一次性项目,我真的不想安装和学习一整套新的工具.(DirectX开发工具包,Silverlight,Flash等.)我还必须在多台计算机上安装它,因此除了基本的.Net框架(2.0)之外的任何东西都会让人痛苦.
对于工具,我有VS2k8,25年的开发经验,独轮车,大屠杀斗篷,大约2天就可以解决这个问题.自从在我的Atari 130XE上使用汇编程序以来,我没有完成动画(对于页面翻转和播放器/导弹图形来说很好!)
建议吗?以下是我想知道的一些事情:
谢谢.
Post Mortem Edit ..."几天后编码"
好吧,项目已经完成.下面的链接派上用场,虽然其中有几个是404.(我希望SO允许不止一个回复被标记为"正确").我必须克服的最大问题是闪烁,当我试图直接在表单上绘制时,这是一个持久的错误.
设置表单上的所有"双缓冲"选项仍然留下一些必须修复的闪烁.(我发现有冲突的文档说"将它们设置在控件上"并"将它们设置在窗体上".好的控件没有.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.根本没有闪烁.
是否有一种规范的方法来测试该进程是否具有计算机的管理权限?
我将开始一个长期运行的过程,并且在此过程的生命周期中,它会尝试一些需要管理员权限的事情.
如果流程具有这些权利而不是以后,我希望能够预先测试.
我有一个配置文件,开发人员可以通过传入一个字符串来指定文本颜色:
<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没有给我带来快乐.建议?
对于特定的应用程序,我需要在屏幕保护程序运行时禁用它.操作员可以手动将其关闭,然后再打开,但最简单的方法是在应用程序运行时保持屏幕保护程序不受影响.
我该怎么做呢?我找到了用SPI_SETSCREENSAVEACTIVE实际关闭屏幕保护程序的代码,但我不认为这就是我想要的.
我有一个多用户应用程序,它为活动保留了一个集中的日志文件.现在,日志记录进入文本文件大约10MB-50MB /天.记录器每天轮换文本文件,我们保留过去4或5天的价值.比这更老的我们没兴趣.
它们很少被阅读:在开发应用程序以获取错误消息,诊断消息时,或者在应用程序处于生产状态时,对用户报告的问题或错误进行分类.
(这严格来说是应用程序日志.安全日志记录保存在别处.)
但是当他们被阅读时,他们就是痛苦的屁股.即使使用Perl,使用10MB文本文件也很有趣:文件中的字段(事务ID,用户ID等)很有用,但只是文本.消息是按顺序写入的,一次一个地写入,因此当尝试跟踪特定事务或用户时,交错活动全部混淆.
我正在寻找关于这个主题的想法.有人用SQL数据库完成了应用程序级日志记录并喜欢它吗?讨厌吗?
我有以下代码:
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将被释放?
事实上,这是与这篇文章相同的问题:
如何在我的DAL中调用时确保我的LINQ查询执行,而不是以延迟的方式执行?
但由于他没有解释为什么他想要它,这个问题似乎已经过了一段时间.这是我类似但更好解释的问题:
我有两种类型的线程(暂时忽略UI线程).有一个"数据收集"线程类型和一个"计算"线程类型.数据收集线程很慢.从各个地方筛选出相当多的数据.计算线程相对较快.到目前为止,设计模型是发送数据收集线程以查找数据,并在完成时将数据传递给计算.
当我在Linq编写数据采集时,我将一些缓慢的内容提升回计算线程.现在有数据元素在计算过程中使用之前没有完全解析 - 这是一个问题.
我想迫使Linq在一定时间内完成工作(声明结束?方法结束?"请完成,该死的"方法调用)以便我知道我以后不会付钱.将".ToList()"添加到Linq的末尾是1.尴尬,并且2.感觉就像拳击即将在另一个线程中暂时取消装箱的东西.
我正在尝试确定微调数据输入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
?