Tag: winforms

维护多个设置文件

目前,我有一个具有各种单选按钮,目录浏览器,日期选择器等的表单。应用程序使用设置,并执行文件删除任务。 我想知道将这些设置保存到可以在以后加载的外部文件的最佳策略是什么。 因此,基本上可以加载,执行每个配置,然后加载另一个配置。 此外,配置可以跨安装/用户传递。 我不相信我可以使用内部.settings文件,因为我将有多组可以加载的设置。

移动无边框Winform按住鼠标右键,可能使用本机方法

我有一种情况,我想通过在其客户区域上按住鼠标右键来移动窗体; 正如我所说,这种forms是无国界的。 我想“本地”移动它(如果可能的话,否则其他答案也可以)。 我的意思是当你在标题栏上按住鼠标左键时它的行为方式(鼠标移动和类似的东西,我得到很多奇怪的行为,但也许只是我)。 我已经阅读了很多内容,这篇文章看起来很有帮助 http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9985b19-cab5-4fba-9dc5-f323d0d37e2f/ 我尝试了各种方式来使用它,并通过http://msdn.microsoft.com/en-us/library/ff468877%28v=VS.85%29.aspx观看以寻找其他有用的东西,WM_NCRBUTTONDOWN出现在我的脑海中, wndproc没有检测到它,也许是因为它是由表单处理的? 任何建议都表示赞赏,谢谢 弗朗切斯科

如何将POCO对象列表绑定到Windows窗体DataGrid

我之前没有真正做过任何窗体,我正在尝试为我创建一个简单的应用程序来查看我的消息记录服务。 我认为最简单的方法是使用DataGridView控件。 如何将简单的对象列表绑定到它并自动生成列标题等? 到目前为止,我已经完成了这项工作,它创建了标题但没有行/数据的列。 List logs = loggingRepo.LoadAll(); logGrid.DataSource = logs; 我原logGrid.DataBind()在ASP.NET中有一个像列表视图一样的logGrid.DataBind()方法,但似乎没有。

尝试使用顶部未选中的项目对ListView进行排序,然后按ID:compare例程抛出一个奇怪的exception

我正在构建一个桌面待办事项列表应用程序,在我的UI中,我有一个ListView控件,列出了每个列表中的所有项目。 每个项目/行都有一个复选框,用于在选中或取消选中时更新数据库中该项目的状态。 到现在为止还挺好! 我试图做的是每当单击一个复选框时重新排序列表,以便列表总是按顶部未选中的项目排序,然后按ID(这是存储在每个的Tag属性中的int值)排序加载列表时的ListViewItem )。 我编写了一个实现IComparer的自定义比较器,并在ItemChecked事件处理程序的ListView上调用Sort() : /// /// Complete or uncomplete a todo item when it’s checked/unchecked /// /// /// private void _taskList_ItemChecked(object sender, ItemCheckedEventArgs e) { var list = sender as ListView; var itemId = e.Item.Tag.ToString(); if(e.Item.Tag != null) { if(e.Item.Checked) // Do some database stuff here to mark as complete else // […]

如何正确地将bindingSource更改提交到源数据库?

我设置了DataGridView和其他UI组件,以允许用户编辑来自SQLite DB的数据。 但是这些更改(即使它们在应用程序中正确显示)也不会保存到DB。 我试过这段代码 aBindingSource.EndEdit(); dbDataSetA.GetChanges(); aTableAdapter.Update(dbDataSetA.Accounts); 但是有并发exception: System.Data.DBConcurrencyException未处理Message = Concurrency violation:UpdateCommand影响了预期的1条记录中的0条。 那么我应该如何将绑定源更改提交给DB,伙计们呢? POST EDIT我启动程序时遇到此exception,然后单击DataGridView中的第二行,然后单击第三行,此时程序引发并发exception。 希望他的帮助能让这个问题更加详细。 先谢谢你,伙计们!

在C#中运行Powershellscript

我试图在Windows窗体中通过C#运行PowerShell脚本。 问题是我有两个枚举,我无法在代码中得到它们: using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; namespace WindowsFormsApp6 { static class Program { /// /// Der Haupteinstiegspunkt für die Anwendung. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } *here } 我理解,我是否必须在静态void下添加以下内容? (在这儿): using (PowerShell PowerShellInstance = PowerShell.Create()) { } […]

使用SendKeys.Send()模拟右Shift + Ctrl

我正在尝试将Shift + Ctrl发送到我的RichTextBox 。 但默认情况下它会发送左键。 SendKeys.Send(“^+”); 无论如何都要模拟右Shift + Ctrl ?

随着时间的推移,添加到List 会变得非常慢

我正在解析一个大约有1000行的html表。 我在每行的一个 中添加~10个字符串到list对象。 前200个左右的循环非常快,但随着时间的推移变得越来越慢。 这是我正在使用的代码: List myList = new List(); int maxRows = numRows; for (int i = 1; i < maxRows; i++) { TableRow newTable = myTable.TableRows[i]; string coll = string.Format("{0},{1},{2},{3},{4}",newTable.TableCells[0].Text,newTable.TableCells[1].Text,newTable.TableCells[2].Text,newTable.TableCells[3].Text,newTable.TableCells[4].Text); myList.Add(coll); label1.Text = i.ToString(); } 我应该使用数组吗? 编辑:我将上面的代码放在一个新的方法上,该方法在一个新的Thread上运行,然后使用以下代码更新我的标签控件: label1.Invoke((MethodInvoker)delegate { label1.Text = i.ToString(); }); 程序以一致的速度运行,不会阻止UI。

保持Form.BackgroundImage在高对比度模式下可见

我有一个带有背景图像的.NET Winform,测试刚刚报告,当Win7中的显示设置设置为高对比度模式时,BackgroundImage被隐藏。 我理解为什么MS默认这样做,但我希望有一种方法可以覆盖这种行为而不改变我的表单的布局? 我宁愿不将我的点击事件等移动到我在表单顶部添加的另一个图像控件来模拟背景(然后还必须移动我的透明PNG以便包含它)…我们是在测试的后期阶段,所以变化越少越好。 “背景”真的不是一个典型的背景,它有文字和重要的内容,不应该隐藏永远。 当然,你可以为我设计糟糕的设计,但是嘿,它似乎可以解决这个小问题;)

C#:将派生类作为一个通用参数传递

我最近开始学习更多关于事件/代理以及类扩展的知识。 我想通过向Windows Form控件添加一个名为SetDraggable()的扩展方法,将我学到的东西付诸实践,然后使用MouseDown和MouseMove事件来移动控件。 一切正常,除了它只适用于特定控件的想法 – 在我的例子中,一个Button 。 namespace Form_Extensions { public static class Extensions { private static System.Windows.Forms.Button StubButton; private static Point MouseDownLocation; public static void SetDraggable(this System.Windows.Forms.Button b) { b.MouseDown += b_MouseDown; b.MouseMove += b_MouseMove; StubButton = b; } private static void b_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { MouseDownLocation = […]