Tag: winforms

WinForms中的HWnd消息挂钩?

什么是WinForms等效于以下WPF代码行? HwndSource.FromHwnd(_windowHandle).AddHook(HwndSourceHookHandler);

ObjectListView强制转换exception(用于命中测试)

我正在使用Grammarian的ObjectListView。 我将旧的列表视图更改为了,但我所做的只是填写项目。 但是当应用程序启动并且我的鼠标位于列表视图上时,它会立即抛出exception: System.InvalidCastException was unhandled Message=”Unable to cast object of type ‘System.Windows.Forms.ListViewItem’ to type ‘BrightIdeasSoftware.OLVListItem’.” Source=”ObjectListView” 如何解决这个问题? 如果这很重要,我也使用Win7。 编辑: 我用字典。 看起来我需要使用SetObjects方法而不是添加项目。 好的,这很棒,但我只是使用dict.Value集合。 我不想通过listview修改数据,只显示。 所以我只有一列,列出了所有字符串。 这可能吗? 我很感激一个小样本。

如何在.NET / C#中的右键菜单上绘制?

我正在开发一个辅助技术应用程序(在C#中),它将信息叠加在当前打开的窗口之上。 它检测可点击的元素,并标记它们。 为此,我正在创建一个无边框透明窗口,TopMost设置为“true”,并在其上绘制标签。 这意味着在当前应用程序前面总会有一个窗口hover,我可以在其上绘制标签。 问题是,这个窗口不包括右键菜单 – 只包括其他窗口。 当用户右键单击时,将在叠加层上方绘制上下文菜单。 我需要能够在右键单击菜单中标记元素,但我无法在当前实现的基础上绘制它。 有人知道解决方案吗? 编辑:这是绘制叠加层的相关代码。 我在表单设计器中设置了表单选项,而不是代码明确,所以我不确定它会有多大帮助。 我删除了与绘图无关的代码或表单本身: public partial class OverlayForm : Form { public OverlayForm() { } protected override void OnPaint(PaintEventArgs eventArgs) { base.OnPaint(eventArgs); Graphics graphics = eventArgs.Graphics; Brush brush = new SolidBrush(this.labelColor); foreach (ClickableElement element in this.elements) { Region currentRegion = element.region; graphics.FillRegion(brush, currentRegion); } } }

获取WebBrowser控件的back / fwd历史记录

在C#WinForms中,获取System.Windows.Forms.WebBrowser的后向/前向历史堆栈的正确方法是什么?

如何只validationwinform中的数字?

如何在不使用Char.IsNumber选项的情况下validation数字为什么Char.IsNumber或.IsDigit不起作用或者我应该使用正则表达式进行validation private bool ValidateContact() { if (Char.IsNumber(textBox4.Text)){ return true; }

如何制作真正透明的控件?

我需要制作一个仅显示轮廓的控件,我需要将它放在显示video的控件上。 如果我使我的控件透明,那么video会被遮挡,因为透明控件是由其父控件绘制的,而video不是由控件绘制的; 它使用DirectShow或其他库显示,因此父控件绘制其BackColor。 那么 – 我可以制作一个根本不会被绘制的控件,除非它是不透明的吗? 这样,父控件就不会对video进行绘制。 我知道我可以用四个控件制作边框(或者更多,如果我想要它破了)但是有可能只使用一个控件做我想要的吗? rslite是对的 – 尽管你甚至不需要像他的例子一样使用PInvoke – Control.Region属性是完全足够的。

知道何时处于设计模式

从类库中,我想知道它是否在设计模式下被访问而不是正常的运行时。 我尝试使用System.ComponentModel.LicenseManager.UsageMode,但即使我在编辑表单时它似乎也有一个Runtime值。 更新:为了澄清,我想知道我是否处于设计模式,而不是来自组件内,而是来自一个单独的类,恰好被表单或控件中的其他项调用。 我有一个Utility类,它是从一个控件间接调用的,我需要知道我是否处于设计模式。

如何防止事件导致自己的事件在C#中触发?

我有一个带有复选框的树视图,我有“AfterCheck”事件的以下处理程序: private void trvAvailableFiles_AfterCheck(object sender, TreeViewEventArgs e) { if (!_isCheckingInProgress) { trvAvailableFiles.BeginUpdate(); var nodePath = e.Node.Tag.ToString(); bool isChecked = e.Node.Checked; e.Node.Nodes.Clear(); try { _fileTreeLogic.GetChildNodes(e.Node, true); e.Node.ExpandAll(); _isCheckingInProgress = true; SetChildrenCheckState(e.Node, isChecked); _isCheckingInProgress = false; } finally { trvAvailableFiles.EndUpdate(); } } } 如果仔细观察,你会发现我正在检查“_isCheckingInProgress”。 如果不是,那么我继续并展开所有节点并调用SetChildrenCheckState()方法。 我遇到的问题是SetChildrenCheckState()随后将导致每个子节点都为其自己的节点触发AfterCheck事件。 我的问题是,是否有更简洁的方法允许第一个AfterCheck事件发生而不是后续事件? 我必须有一个实例bool变量来检查和设置似乎有点hackish。

ListView项目已添加事件

将项目添加到listView时是否有可以使用的事件?

在Windows窗体中更新UI对象

Pre .net我正在使用MFC,ON_UPDATE_COMMAND_UI和CCmdUI类来更新我的Windows UI的状态。 从较旧的MFC / Win32参考: 通常,菜单项和工具栏按钮具有多个状态。 例如,如果菜单项在当前上下文中不可用,则该菜单项变灰(变暗)。 菜单项也可以选中或取消选中。 如果不可用,也可以禁用工具栏按钮,或者可以检查它。 当程序条件发生变化时,谁更新这些项目的状态? 从逻辑上讲,如果一个菜单项生成一个由文档处理的命令,那么让文档更新菜单项是有意义的。 该文档可能包含更新所基于的信息。 如果命令具有多个用户界面对象(可能是菜单项和工具栏按钮),则两者都被路由到相同的处理函数。 这将在一个位置封装所有等效用户界面对象的用户界面更新代码。 该框架为自动更新用户界面对象提供了方便的界面。 您可以选择以其他方式进行更新,但提供的界面高效且易于使用。 .net Windows Forms的指导是什么? 我在主窗体中使用Application.Idle处理程序,但我不确定这是执行此操作的最佳方法。 大约在我将所有UI更新放入Idle事件处理程序的时候,我的应用程序开始显示一些性能问题,而我还没有用于跟踪此问题的指标。 不确定它是否相关。