我在我的WPF应用程序中创建了一个"附加行为",它允许我处理Enter按键并移动到下一个控件.我将其称为EnterKeyTraversal.IsEnabled,您可以在此处查看我博客上的代码.
我现在主要担心的是我可能有内存泄漏,因为我正在处理UIElements上的PreviewKeyDown事件,并且从未明确地"取消"该事件.
什么是防止这种泄漏的最佳方法(如果有的话)?我应该保留我正在管理的元素列表,并在Application.Exit事件中取消挂起PreviewKeyDown事件吗?有没有人在自己的WPF应用程序中成功附加行为,并提出了一个优雅的内存管理解决方案?
所以我正在阅读那些在另一个问题中链接到的Windows Vista UI指南,并且他们提到您应该能够在切换到120 DPI后继续存在.好吧,我安装了我的应用程序,启动了我方便的虚拟机,我们得到了什么... AAAAGH !!! 大规模的UI失败!
一切都是乱七八糟的:一些容器对于他们的文本来说不够大; 一些"彼此相邻"的控件现在都被挤压在一起/分开; 有些按钮不够高; 我的ListView
专栏不够广...... eeek.
这听起来像是一种完全不同的方法.我之前的一个基本上是使用VS2008 Windows窗体设计器来创建一个基于像素的布局.我可以看到,如果我坚持使用Windows Forms,FlowLayoutPanel
s会有所帮助,尽管我发现它们在过去相当不灵活.它们也没有解决容器(例如表格本身)不够大的问题; 大概有办法做到这一点?也许那个AutoSize
属性?
这也可能表明是时候跳槽到WPF了; 我的印象是它专门为这种东西而设计.
基本问题似乎归结为以下几点:
如何使用密码保护ClickOnce部署的应用程序?我是否必须更改Web的IIS设置或有没有办法以编程方式执行此操作?我正在使用Visual Studio 2005(.NET 2.0).
如果我必须使用Web凭据,是否仍然可以自动更新应用程序?
如果您可以提供一些示例代码或管理IIS的详细说明,那将会很棒.
谢谢!
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底部而不是底部.我该怎么做?
我想将以下字符串转换为数组/嵌套数组:
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) 我问的是,当我要使用c#开发客户端应用程序来显示库存数据并进行一些用户交互时,请给我链接以获取之前阅读过的最佳教程
我今天正在阅读我的一些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#会从中受益吗?
我在将文件从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位...不确定这是否是问题的一部分.
给出以下代码段:
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"类型.
这是为什么?
我正在构建一个WPF 4应用程序,我想在屏幕右下角的单独窗口中的格式良好的框中显示一条消息.
我非常喜欢当应用程序与主服务器同步时Evernote的弹出窗口.
我该怎么做呢?
我只是在我的应用程序和新窗口中创建一个新窗口显示我的消息,然后使用计时器关闭它,还是有更好的方法?