小编Mat*_*ton的帖子

通过附加行为防止内存泄漏

我在我的WPF应用程序中创建了一个"附加行为",它允许我处理Enter按键并移动到下一个控件.我将其称为EnterKeyTraversal.IsEnabled,您可以在此处查看我博客上的代码.

我现在主要担心的是我可能有内存泄漏,因为我正在处理UIElements上的PreviewKeyDown事件,并且从未明确地"取消"该事件.

什么是防止这种泄漏的最佳方法(如果有的话)?我应该保留我正在管理的元素列表,并在Application.Exit事件中取消挂起PreviewKeyDown事件吗?有没有人在自己的WPF应用程序中成功附加行为,并提出了一个优雅的内存管理解决方案?

.net memory wpf

11
推荐指数
2
解决办法
5694
查看次数

字体大小独立UI:当我切换到120 DPI时,一切都破了?

所以我正在阅读那些在另一个问题中链接到的Windows Vista UI指南,并且他们提到您应该能够在切换到120 DPI后继续存在.好吧,我安装了我的应用程序,启动了我方便的虚拟机,我们得到了什么... AAAAGH !!! 大规模的UI失败!

一切都是乱七八糟的:一些容器对于他们的文本来说不够大; 一些"彼此相邻"的控件现在都被挤压在一起/分开; 有些按钮不够高; 我的ListView专栏不够广...... eeek.

这听起来像是一种完全不同的方法.我之前的一个基本上是使用VS2008 Windows窗体设计器来创建一个基于像素的布局.我可以看到,如果我坚持使用Windows Forms,FlowLayoutPanels会有所帮助,尽管我发现它们在过去相当不灵活.它们也没有解决容器(例如表格本身)不够大的问题; 大概有办法做到这一点?也许那个AutoSize属性?

这也可能表明是时候跳槽到WPF了; 我的印象是它专门为这种东西而设计.

基本问题似乎归结为以下几点:

  • 如果我坚持使用Windows窗体,那么实现独立于字体大小的布局有哪些技巧可以在用户设置大字体或将显示设置为120 DPI后继续存在?
  • WPF在这方面是否具有显着的优势,如果是这样,你能否试着说服我这是值得转换的?
  • 对于与字体大小无关的布局,是否存在任何通用的"最佳实践",无论是在.NET堆栈中还是在一般情况下?

.net wpf user-interface fonts winforms

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

受密码保护的.NET ClickOnce部署?

如何使用密码保护ClickOnce部署的应用程序?我是否必须更改Web的IIS设置或有没有办法以编程方式执行此操作?我正在使用Visual Studio 2005(.NET 2.0).

如果我必须使用Web凭据,是否仍然可以自动更新应用程序?

如果您可以提供一些示例代码或管理IIS的详细说明,那将会很棒.

谢谢!

.net security deployment clickonce winforms

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

将文本附加到富文本框的开头

private void button1_Click(object sender, EventArgs e)
{
    richTextBox1.AppendText("\r\n");
    richTextBox1.Focus();
    string s = "Enter ";
    richTextBox1.AppendText(s + "\r\n");
    richTextBox1.SelectionStart = richTextBox1.Text.Length - (s.Length +1);
    richTextBox1.SelectionLength = s.Length +1;
    richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Bold);
    richTextBox1.DeselectAll();
    richTextBox1.SelectionStart = richTextBox1.Text.Length;
    richTextBox1.SelectionLength = richTextBox1.Text.Length;
    richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Regular);
    richTextBox1.DeselectAll();
}
Run Code Online (Sandbox Code Playgroud)

每次用户点击按钮时,我都希望新的"Enter"位于RichTextBox底部而不是底部.我该怎么做?

c# richtextbox

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

如何将带括号的Ruby字符串转换为数组?

我想将以下字符串转换为数组/嵌套数组:

str = "[[this, is],[a, nested],[array]]"

newarray = # this is what I need help with!

newarray.inspect  # => [['this','is'],['a','nested'],['array']]
Run Code Online (Sandbox Code Playgroud)

ruby arrays

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

任何Windows窗体应用程序最常见的设计模式是什么?

我问的是,当我要使用c#开发客户端应用程序来显示库存数据并进行一些用户交互时,请给我链接以获取之前阅读过的最佳教程

c# design-patterns winforms

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

你喜欢那些让你把"then"放在"if"之前的语言吗?

我今天正在阅读我的一些C#代码并找到了这一行:

if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) return;
Run Code Online (Sandbox Code Playgroud)

请注意,您可以在不滚动的情况下判断它是一个与ItemContainerGenerator.Status一起使用的"if"语句,但是如果"if"子句的计算结果为"true",则无法轻易判断该方法将在该点返回.

实际上我应该将"return"语句单独移动到一行,但是它让我想到了首先允许语句的"then"部分的语言.如果C#允许它,该行可能如下所示:

return if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated);
Run Code Online (Sandbox Code Playgroud)

这可能有点"争论",但我想知道人们对这种结构的看法.它可能有助于使像上面这样的行更具可读性,但它也可能是灾难性的.想象一下这段代码:

return 3 if (x > y);
Run Code Online (Sandbox Code Playgroud)

逻辑上我们只能返回x> y,因为没有"其他",但是我的一部分看着它并且认为,"如果x <= y,我们还在返回吗?如果是这样,我们又回来了什么?"

您如何看待"之前的if"结构?它是否以您选择的语言存在?你经常使用它吗?C#会从中受益吗?

c# programming-languages

9
推荐指数
4
解决办法
449
查看次数

从Windows文件资源管理器拖放到Windows窗体上无法正常工作

我在将文件从Windows资源管理器拖到Windows窗体应用程序时遇到问题.

我拖动文本时工作正常,但由于某种原因它无法识别文件.这是我的测试代码:

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

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Form1上将AllowDrop设置为true,正如我所提到的,如果我将文本拖到窗体上,它就可以工作,而不是实际的文件.

我正在使用Vista 64位...不确定这是否是问题的一部分.

c# drag-and-drop vista64 winforms

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

为什么在命名空间之外引用的类型需要完全限定?

给出以下代码段:

using System;

using Foo = System.Int32;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除"系统".从我在"Foo"类型别名的声明中的Int32前面,我得到一个编译器错误.尽管我在文件顶部使用System命名空间,但编译器找不到不合格的"Int32"类型.

这是为什么?

c#

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

如何显示WPF应用程序的Toast通知?

我正在构建一个WPF 4应用程序,我想在屏幕右下角的单独窗口中的格式良好的框中显示一条消息.

我非常喜欢当应用程序与主服务器同步时Evernote的弹出窗口.

我该怎么做呢?

我只是在我的应用程序和新窗口中创建一个新窗口显示我的消息,然后使用计时器关闭它,还是有更好的方法?

wpf

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