小编Hen*_*man的帖子

为什么MenuItem标题在它们之前有下划线?

如果你宣布MenuItems,我总是看到他们的Header属性声明如下:

<MenuItem Header="_Edit">
    <MenuItem Header="_Undo"/>
    <MenuItem Header="_Redo"/>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)

而不是像这样:

<MenuItem Header="Edit">
    <MenuItem Header="Undo"/>
    <MenuItem Header="Redo"/>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)

有这个原因还是只是一个惯例?在设计师看来,无论我是否有下划线,它似乎都没有影响.

c# wpf menu menuitem

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

开发人员在编程语言之间迁移的真正挑战是什么?

许多开发人员会声称从一种编程语言转移到另一种编程语言相对简单,特别是如果语言基于类似的范例.然而,在实践中,努力不是通过学习语言的语法,而是通过深入理解语言的细微差别,更重要的是了解语言库中提供的内容.例如,从语法角度来看,从Java切换到.Net并不困难,但编程效率需要对可用库有很好的了解.鉴于语言差异,从PHP切换到.Net可能会带来更大的障碍.

开发人员在同一范例中迁移到不同语言的实际开销是多少?如果范式不同怎么办?

language-agnostic migration

9
推荐指数
2
解决办法
1366
查看次数

命名用户控件的最佳做法?

我创建了很多用户控件来封装我的应用程序中多个位置使用的GUI功能.我注意到我通常倾向于描述控件的功能并在名称的末尾添加"Control",但并非总是如此.我想标准化命名,并想知​​道在.NET中命名用户控件是否有最佳实践?

.net c# naming-conventions winforms

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

BigInteger是不可变的吗?

在.NET 4 beta 2中,有一个新的Numerics命名空间 struct BigInteger.该文件指出,这是一个不变的类型,因为我本来期望.

但我对后增量运算符(++)有点困惑.这种defintely似乎改变了价值.以下while循环有效:

static BigInteger Factorial(BigInteger n)
{
    BigInteger result = BigInteger.One;
    BigInteger b = BigInteger.One;

    while (b <= n)
    {
        result = result * b;
        b++;  // immutable ?
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这就是MSDN对Increment运算符的看法:

因为BigInteger对象是不可变的,所以Increment运算符创建一个新的BigInteger对象,其值比value表示的BigInteger对象多一个.因此,重复调用Increment可能很昂贵.

一切都很好,我会理解,如果我必须使用, b = b++但显然++本身就足以改变一个价值.

有什么想法吗?

编辑:
正如Lasse所指出的那样,对增量后工作的方式有一个逐步的说明.但这仍然似乎与不变性有关.例如,我无法想象使用此运算符是线程安全的.

.net c# biginteger immutability fcl

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

ContextMenuStrip导致内存泄漏

我正在创建许多自定义控件并将它们添加到FlowLayoutPanel.还有一个在设计时创建并填充的ContextMenuStrip.

每次将控件添加到面板时,都会将其ContextMenuStrip属性分配给此菜单,以便所有控件"共享"相同的菜单.但我注意到当从面板中删除控件并将其丢弃时,任务管理器中使用的内存不会丢失.每次创建控件并将其添加到布局面板时,它都会上升大约50kB.

我下载了.NET Memory Profiler的试用版,它显示在控件处理完毕后,有一些菜单条的引用.我更改了代码,在处理控件之前将ContextMenuStrip属性显式设置为null,是的,内存现在已经释放了.为什么是这样?GC不应该清理这种类型的东西吗?

.net c# memory-leaks winforms

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

Delphi:有一个RTL函数来删除字符串的重音吗?

我需要从字符串中删除重音符号,这是否有Delphi(2009+)函数?

我希望我的字符串只包含AZ az 0-9字符,所以我想自动删除重音

喜欢:

RemoveAccents(àèÃÜÿñ)
Run Code Online (Sandbox Code Playgroud)

这给了

aeAUyn
Run Code Online (Sandbox Code Playgroud)

等等....

delphi string delphi-2009

9
推荐指数
0
解决办法
3290
查看次数

MeasureString和DrawString的区别

为什么我必须将MeasureString()结果宽度增加21% size.Width = size.Width * 1.21f; 来逃避Word Wrap DrawString()

我需要一个解决方案来获得确切的结果.

相同的字体,相同的字符串格式,两个函数中使用的文本相同.


从OP回答:

  SizeF size = graphics.MeasureString(element.Currency, Currencyfont, new PointF(0, 0), strFormatLeft);
  size.Width = size.Width * 1.21f;
  int freespace = rect.Width - (int)size.Width;
  if (freespace < ImageSize) { if (freespace > 0) ImageSize = freespace; else ImageSize = 0; }
  int FlagY = y + (CurrencySize - ImageSize) / 2;
  int FlagX = (freespace - ImageSize) / 2;
  graphics.DrawImage(GetResourseImage(@"Flags." + element.Flag.ToUpper() + ".png"), 
         new Rectangle(FlagX, FlagY, ImageSize, ImageSize)); …
Run Code Online (Sandbox Code Playgroud)

.net c# string graphics

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

那些额外的花括号在C#中做什么?

我不知道如何搜索这个问题; 如果它是多余的,请原谅我.

所以,我有一些像这样的代码:

textBox1.InputScope = new InputScope { Names = { _Scope } };
Run Code Online (Sandbox Code Playgroud)

Names属性的类型为IList

我的代码是在列表中添加项目还是创建新列表?

额外的花括号是做什么的?

c#

9
推荐指数
3
解决办法
1735
查看次数

获得屏幕的原生分辨率

有没有办法在c#中获得屏幕的原生分辨率?

我问的原因是我有一些曲线,无论分辨率如何,它们看起来都非常重要.当屏幕不是原始分辨率时,它们看起来与以前有些不同,我想要显示一个警告,就是这种情况.

.net c# wpf screen-resolution

9
推荐指数
2
解决办法
8080
查看次数

在具有常数和的范围内生成N个随机数

我想生成从[a,b]之间的特定分布(例如,均匀随机)中抽取的N个随机数,它们总和为常数C.我尝试了几种我能想到的解决方案,有些提议在类似的线程但是他们中的大多数要么是为有限形式的问题工作,要么我无法证明结果仍然遵循预期的分布.

我尝试过:生成N个随机数,将它们全部除以它们的总和并乘以所需的常数.这似乎有效,但结果并不遵循数字应在[a:b]范围内的规则.

Generage N-1随机数加0和期望的常数C并对它们进行排序.然后计算每两个连续nubmers之间的差异,结果是差异.这再次总结为C但是具有与最后一个方法相同的问题(范围可以大于[a:b].

我还尝试生成随机数,并始终以保持所需总和和范围的方式跟踪最小值和最大值,并提供此代码:

bool generate(function<int(int,int)> randomGenerator,int min,int max,int len,int sum,std::vector<int> &output){
    /**
    * Not possible to produce such a sequence
    */
if(min*len > sum)
    return false;
if(max*len < sum)
    return false;

int curSum = 0;
int left = sum - curSum;
int leftIndexes = len-1;
int curMax = left - leftIndexes*min;
int curMin = left - leftIndexes*max;

for(int i=0;i<len;i++){
    int num = randomGenerator((curMin< min)?min:curMin,(curMax>max)?max:curMax);
    output.push_back(num);
    curSum += num;
    left = sum - curSum;
    leftIndexes--;
    curMax = left - …
Run Code Online (Sandbox Code Playgroud)

c++ random algorithm sum range

9
推荐指数
2
解决办法
2298
查看次数