Tag: winforms

用户控制 – 自定义属性

我已经在Visual Studio(WinForms C#)中开发了一个用户控件,并且有一个问题。 我需要我的用户控件的用户能够更改某些string值,我希望他们能够将用户控件添加到他们的窗体,然后单击它以调出属性窗格,其中我的用户控件的自定义属性将显示。 我怎样才能有我自己的用户控件的自定义属性? 例如: 我的用户控件包含一个TextBox,我希望用户能够通过Design-Time属性中名为“Text”或“Value”的属性来更改该TextBox的值。

WinForms中优雅的日志窗口C#

我正在寻找一个有效的方式来实现一个Windows窗体应用程序的日志窗口的想法。 在过去,我已经使用TextBox和RichTextBox实现了几个,但我仍然不完全满意function。 这个日志旨在为用户提供各种事件的最近历史logging,主要用于数据收集应用程序,其中人们可能会好奇如何完成一个特定的事务。 在这种情况下,日志不需要是永久的,也不需要保存到文件中。 首先,一些提出的要求: 高效快捷; 如果连续快速地将数百行写入日志,则需要耗费最less的资源和时间。 能够提供高达2000行左右的variables回滚。 任何更长的是不必要的。 突出显示和颜色是首选。 字体效果不是必需的。 在达到回滚限制时自动修剪线条。 在添加新数据时自动滚动。 奖励,但不是必需的:在手动交互期间暂停自动滚动,例如用户正在浏览历史logging。 到目前为止,我一直在使用什么来编写和修剪日志: 我使用下面的代码(我从其他线程调用): // rtbLog is a RichTextBox // _MaxLines is an int public void AppendLog(string s, Color c, bool bNewLine) { if (rtbLog.InvokeRequired) { object[] args = { s, c, bNewLine }; rtbLog.Invoke(new AppendLogDel(AppendLog), args); return; } try { rtbLog.SelectionColor = […]

如何将我的新用户控件添加到工具箱或新的Winform?

我有一个现有的库(不是一个Winforms应用程序),提供一些WinForms的真正的Windows应用程序。 在这个库中,我想创build一个用户控件将一些控件分组在一起。 要做到这一点,我右键单击,添加,用户控件,并将一些控件拖到新的用户控件。 到现在为止还挺好。 用户控制甚至具有必要的用户控制图标。 但是将新的用户控件从解决scheme资源pipe理器拖到一个新的空白Winform不起作用(我得到一个通过它的一个圆的圆),并拖动到工具箱也无法正常工作(即使我得到一个+符号当我把它拖到工具箱上时)。 是否有某种XML魔术或其他东西我失踪,使这项工作? 注意:我遇到了一些Visual Studio 2008的问题,我通过遵循可以在这里find的解决方法来解决这个问题 。 我现在可以通过简单地重build项目,将我添加到现有项目中的用户控件join到工具箱中。

C#Winforms粗体树视图节点不显示整个文本

我正在使用下面的代码来使我的treenodes粗体: Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold); foreach (QuestionnaireBuilder_Category cat in categories) { TreeNode node = new TreeNode(); node.Text = cat.Description; node.Name = cat.Id.ToString(); node.NodeFont = font; tvQuestionSequence.Nodes.Add(node); } 但粗体节点的文本显示不正确。 最后一个字母没有显示。 怎么来的? 而如何解决这个问题呢?

如何正确停止BackgroundWorker

我有一个2combobox的forms。 我想要填充combobox2.DataSource基于combobox1.Text和combobox2.Text (我假设用户已经完成在combobox1input,并在combobox2input中间)。 所以我有一个combobox2事件处理程序是这样的: private void combobox2_TextChanged(object sender, EventArgs e) { if (cmbDataSourceExtractor.IsBusy) cmbDataSourceExtractor.CancelAsync(); var filledComboboxValues = new FilledComboboxValues{ V1 = combobox1.Text, V2 = combobox2.Text}; cmbDataSourceExtractor.RunWorkerAsync(filledComboboxValues ); } 至于构buildDataSource是耗时的过程(它创build一个对数据库的请求并执行它),我决定最好在另一个使用BackgroundWorker的进程中执行它。 因此,当cmbDataSourceExtractor尚未完成其工作并且用户再次input一个符号时,就会出现这种情况。 在这种情况下,我在这一行上得到一个exception cmbDataSourceExtractor.RunWorkerAsync(filledComboboxValues ); 关于BackgroundWorker繁忙,不能在同一时间执行多个操作。 如何摆脱这个exception? 提前致谢!

DataGridView自动调整和填充

我有我的DataGridView 3列。 我想要做的是有前2列自动适应内容的宽度,并有第三列填补剩余的空间。 在WinForms中可以做到吗? 我正在从EF DataContext加载我的数据,如果这是任何使用。 我已经包括了它目前的样子。

如何从Windows窗体DateTimePicker控件只获取date值?

我正在用C#代码构build一个应用程序。 如何从DateTimePicker控件获取date值?

单击closuresbutton时隐藏表单而不是closures

当用户单击表单上的Xbutton时,如何隐藏它而不是closures它? 我已经在FormClosing尝试this.hide() ,但它仍然closures窗体。

我怎样才能让一个DateTimePicker显示一个空string?

我希望能够显示一个DateTimePicker的默认值是什么,即没有date。 例如,我有一个任务的开始datedtTaskStart和一个结束datedtTaskEnd ,但结束date不知道,最初没有填充。 我已经为这两个控件指定了一个自定义的yyyy-MM-dd格式。 将该值设置为null ,或者在运行时设置一个空string会导致错误,那么我该如何实现? 我已经考虑使用checkbox来控制这个字段的使能,但是仍然存在显示初始值的问题。 编辑: 可以说是DateTimePicker空值(.NET)的问题的重复,但我发现我的问题的解决scheme不是解决这个问题,所以我认为它应该留在这里为其他人find..

如何授予我的应用程序为所有用户创build的文件的完整权限?

我开发的工具需要授予对其创build的文件的访问权限“完全控制”。 它需要阅读,修改和删除所有的Windows帐户,甚至可能的未来帐户。 这能实现吗? 我知道我可以尝试这个SPECIFIC_USER: FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); FileSecurity fSecurity = File.GetAccessControl(filePath); fSecurity.SetAccessRule(rule); File.SetAccessControl(filePath, fSecurity); 但是,如何将其授予所有用户? 甚至可能的未来账户? 如果后半部分是不可能的,怎么去解决第一个要求? 谢谢。 编辑: 这是为我工作的代码。 从回答者的链接采取。 private bool GrantAccess(string fullPath) { DirectoryInfo dInfo = new DirectoryInfo(fullPath); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); return true; } 请注意PropagationFlags.NoPropagateInherit是必需的(在链接中提到最后)。 它确实授予甚至未来的帐户的特权。