我已经写了一个小应用程序,禁用在C#中的Windows操作系统的所有窗口的标题栏和任务栏图标。 这里是代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace IconKiller { class Program { /// Import the needed Windows-API functions: // … for enumerating all running desktop windows [DllImport("user32.dll")] static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDesktopWindowsDelegate lpfn, IntPtr lParam); private delegate bool EnumDesktopWindowsDelegate(IntPtr hWnd, int lParam); // … for loading an icon [DllImport("user32.dll")] static extern IntPtr […]
我创build了一个完美的应用程序,直到用户select125%或150%。 这会打破我的申请。 后来我发现了一种通过检测DPI来查找字体大小的方法。 这个工作很好,直到用中文版本的Windows 7开始使用我的应用程序。 整个应用程序在中文窗口7中断。从我所知道的(我不能真正testing它,因为我只有英文版本和安装语言包不会导致问题)中国字符造成了一个奇怪的DPI,打破了我的申请。 我现在的代码是这样的: if (dpi.DpiX == 120) //For 125% fonts { //Resize form and set default font to correct problems } else if (dpi.DpiX == 96) //For 100 and 150% fonts { //Resize form and set default font to correct problems } 在英文版本的Windows 7上,这个版本很好用,但不知何故,中文版本正好跳过了这个版本,而且表格本身也被破坏了,控件甚至没有显示出来,字体也非常大,推动了这个问题,图片框被移动了。 那么,在没有检测API的情况下,检测窗口字体比例(100%,125%和150%)的好方法是什么? 我需要一些可以在所有的Windows 7操作系统和语言上运行的东西。
我将绑定一个枚举的值与一个combobox控件。 我已经写了这个代码: cboPriorLogicalOperator.DataSource = Enum.GetValues(typeof(MyEnum)) .Cast<MyEnum>() .Select(p => new { Key = (int)p, Value = p.ToString() }) .ToList(); myComboBox.DisplayMember = "Value"; myComboBox.ValueMember = "Key"; 它运作良好,但我想知道是否有一个更简单的方法。
System.Web.UI.WebControls.TreeView类提供这个事件,但是TreeView的Forms版本没有。 表单世界中的等价物是什么? 我使用的是AfterSelect,但看起来不太正确。 也许这是我正在寻找的东西,但是文档有点朦胧。
我有一个简单的应用程序,反转任何文本input到另一个文本框中。 问题是,你可以修改任何一个文本框,这些改变将会被(反过来)反映在另一个文本框中。 我写这个代码,相信会导致问题。 private void realText_TextChanged(object sender, EventArgs e) { mirrorText.Text = mirror(realText.Text); } private void mirrorText_TextChanged(object sender, EventArgs e) { realText.Text = mirror(mirrorText.Text); } private string mirror(string text) { return new string(text.Reverse().ToArray()).Replace("\n\r", "\r\n"); } 然后我试了一下,认为它会导致无限循环( realText更改mirrorText ,另一个事件发生, mirrorText更改realText等)。 然而,除了预期的行为发生之外, 我当然很高兴,我可以把它留在这里。 或者我可以吗? 我很确定TextChanged事件应该被触发,每当Text被改变。 这是事件中一些错误保护的预期行为,还是我只是幸运? 这个代码可能在其他计算机上运行不正常,还有其他的编译设置等? 它可以很容易地修复: private void realText_TextChanged(object sender, EventArgs e) { if (realText.Focused) […]
我正在尝试创build一个multilayout主屏幕应用程序。 我在顶部有一些button,链接到应用程序的主要部分(例如模型中的每个实体的pipe理窗口) 单击这些button中的任何一个都会在Panel中显示相关的UserControl。 面板持有UserControls,该控件又保存UI。 WinForms UserControl不具有Anchor或Dock属性。 我已经尝试设置UserControl的属性 AutoSize=True 和 private void ManageUsersControl_Load(object sender, EventArgs e) { this.Width = this.Parent.Width; this.Width = this.Parent.Height; } 但是这些都不起作用。 注意:我在运行时dynamic加载这个控件
我正在尝试使用XDocument方法读取xml文档。 但是我得到一个错误,当XML有 <?xml version="1.0" encoding="utf-16"?> 当我手动删除编码。它完美的作品。 我收到错误“ 没有Unicode字节顺序标记,不能切换到Unicode”。 我试图寻找,我在这里登陆 – > 为什么包含XML头时C#XmlDocument.LoadXml(string)失败? 但解决不了我的问题。 我的代码: XDocument xdoc = XDocument.Load(path); 有什么build议么 ?? 谢谢。
我有这样的一个class级: private class MyClass { [DisplayName("Foo/Bar")] public string FooBar { get; private set; } public string Baz { get; private set; } public bool Enabled; } 当我创build一个List<MyClass>并将其分配给DataGridView的DataSource时,网格会显示两列“Foo / Bar”和“Baz”。 这就是我想要发生的事情。 它目前的作品,因为Enabled是一个字段,而不是一个属性 – DataGridView将只会select属性。 但是,这是一个肮脏的黑客。 我想使启用一个属性,但仍然隐藏在DataGridView。 我知道我可以手动删除绑定后的列..但是这并不理想。 是否有一个类似于DisplayName的属性,我可以标记一个属性? 像[Visible(false)] ?
我有一个datagridview,我从一个SQL表绑定,在那个DV我有这些属性:ID,名称和价格。 当我设置名称列SortMode自动,我点击这个列的标题,我可以根据名称的第一个字母sorting这个DV,这样我可以根据他们的第一个字母(Acumulator,船,可口可乐,发动机等)。 有没有这种事情发生的方式,而不点击列名称的标题。 我正在寻找一些代码,将在窗体加载时做这个工作。
是否有可能在构造函数正在执行时closures窗体(或仅仅是在此阶段停止显示)? 我有以下代码: public partial class MyForm : Form { public MyForm() { if (MyFunc()) { this.Close(); } } } 在Main()中抛出一个ObjectDisposedException,在这里: static void Main() { … // Following line errors Application.Run(new MyForm()); } 我试过这样检查MyForm的结果: static void Main() { … MyForm frm = new MyForm(); if (frm != null) { // Following line errors Application.Run(frm); } } […]