Tag: winforms

RegisterHotKey无法使用隐形表单(c#)

我试图在系统托盘中放置一个图标,然后给它一个全局键盘快捷键来执行一个function。 我正在使用RegisterHotKey设置全局键盘快捷键,如果与该图标关联的主窗体可见,则它可以正常工作。 但是如果表单是不可见的,那么永远不会调用WndProc方法。 有任何想法吗? 编辑:我的意思是“隐藏”是将以下内容添加到主窗体: protected override void OnLoad(EventArgs e) { hotKey = new GlobalHotkey(GlobalHotkey.WIN, Keys.T, this); bool registered = hotKey.Register(); Visible = false; ShowInTaskbar = false; base.OnLoad(e); } “registered”显示为“true”,如果我忽略“Visible = false”,快捷键工作正常 和“ShowInTaskbar = false;”。

为什么OnClosing已经过时,我应该迁移到OnFormClosing

我正在阅读System.Windows.Forms.Form.OnClosing()方法的MSDN文档 ,并注意到: 注意:OnClosing方法在.NET Framework 2.0版中已过时; 请改用OnFormClosing方法。 我找不到它为何被标记为过时的参考。 我想我会在这里问: 在我浪费几个小时穿过reflection器之前 将其他人作为参考是有用的 我看到的唯一区别是你可以访问FormClosingEventArgs ,所以如果你不需要那些(如果你使用的是OnClosing,你很明显没有)那么切换到OnFormClosing有什么好处? 我知道过时意味着它可以消失,所以你应该尽快更新,但你和我都知道在MS土地上淘汰意味着很少。 我想知道有关原因的可靠技术细节。

Windows窗体调整框架,没有标题栏?

如何从Windows窗体隐藏标题栏但仍具有resize框?

WinForms:如何在C#中检查文本框中的最小字符数量?

我试图确保用户在我的程序中使用至少6个字符作为密码。 我知道如何使用MaxLength设置最大尺寸,但我如何以最小长度执行此操作?

C#时间线控制

我有一个SQLite数据库支持快速搜索和日志访问。 我现在正在设计如何选择日志视图的日期范围。 我正在考虑一个图形时间轴,可以通过鼠标导航,具有缩放function,以便您可以根据需要钻取到小时/分钟跨度,或者如果缩放function太复杂(那么只需要一个文本框)显示时间线的开始和结束日期。 有不同的日志消息类型(5或6),我想在时间轴上用不同的颜色指示每种类型 这在视觉上非常好看: www.codeproject.com/KB/wtl/wtltimeline.aspx AC(.net)版本(开源)或类似版本会很棒。 有人有他们会推荐的东西吗? 我希望避免从头开始编写自己的控件。 请求帮助。 谢谢!

如何在inheritance的ControlDesigner类中获取ITypeDescriptorContext和IServiceProvider

我已将ControlDesigner类inheritance到MyControlDesigner 。 在这个类中,我需要获取ITypeDescriptorContext和IServiceProvider接口背后的对象,但我不知道如何:( 我需要这两个接口在方法中传递它们,但我无法在任何其他对象中找到它们。 有人能帮帮我吗。 谢谢 最好的问候Bojan

UserControl中的ConfigurationManager连接字符串为null

我有一个应用程序通过数据层获取数据到表单,使用这样的东西: public DataTable get(String query, ArrayList parameters = null) { using (iDB2Connection cn = new iDB2Connection(ConfigurationManager.ConnectionStrings[“iseries”].ToString())) { // get the data and return them } } 我有获取数据的表单,这很好用。 但是,我创建了一个UserControl,它通过这个方法获取数据,当我运行我的项目时工作正常,但是,包含UserControl的表单会引发设计器exception。 “为了防止在加载设计器之前丢失数据,必须解决以下错误:” 我发现错误位于从检索连接字符串时。 它会抛出nullpointerexception。 但仅限于设计模式。 当我忽略它时,一切正常,但是,我想知道如何解决这个问题。 通过我的UserControl访问它们时,为什么我的 null? 更新1 似乎我的UserControl根本无法识别 。 当我将此代码放入UserControl Load事件时,我也得到了一个null引用。 private void SelectUser_Load(object sender, EventArgs e) { txtLocation.Text = ConfigurationManager.AppSettings[“location”].ToString(); }

键盘助记符在标签控件上的用途是什么?

在C#中的标签控件上添加助记符有什么意义? 我有一个带有”&SomeText”文字的标签。 当我按下ALT + S时触发了什么事件(我已经尝试过OnClick但它没有被触发)

计时器在交叉线程中不起作用

我的表单中有2个全局System.Windows.Forms.Timer 。 两者都在表单的构造函数中初始化。 但尚未开始。 构造函数启动一个新线程 ,该线程启用并启动两个计时器。 显然它是所有交叉线程 ,但它不会抛出任何跨线程exception。 但它甚至不起作用。 它不会触发Timer.Tick方法。 这是代码: 第一种方法: 在表单构造函数中: KeepMeAliveTimer = new Timer(); //timer 1 KeepMeAliveTimer.Interval = 15000; KeepMeAliveTimer.Tick += KeepMeAlive; timer1 = new Timer(); //timer 2 timer1.Interval = 15000; timer1.Tick += timer1_Tick; //started a new thread 在新的thead: //after performing some tasks, it enables the timers KeepMeAliveTimer.Enabled = true; //timer 1 […]

如何正确使用实时优先级

我的问题可能并不是真正的实时处理,但话说可能是。 我的应用程序有几个比GUI重要得多的线程,但我确实希望GUI至少可以使用。 我不希望它一直被锁定,我确实想要更新屏幕给出我正在执行的处理结果。 目前我所有必需的项目都是在单独的线程中隔离的,我调用GUI的代理来显示结果。 我的GUI工作,但如果我更改标签,或最小化/最大化它,已知会阻碍我的其他线程,他们无法在0.1s的时间限制内执行操作。 这就是我打电话给我的代表所做的事情: delegate void FuncDelegate(ResultContainer Result); FuncDelegate DelegatedDisplay= new FuncDelegate(DisplayResults); //then later on Invoke(DelegatedDisplay, Result); 我的大多数关键进程都是在连续循环中运行的线程,从各种缓冲区(ArrayLists和普通列表)拉出并推送到各种缓冲区。 每次都会启动我的一个关键线程,使用: Thread mythread = new Thread(new ThreadStart(ProcessResults)); mythread.Start(); 我之所以这样做,而不是只是让一个线程在一个循环中运行,从列表中拉出来的原因,我想也许我的时钟时间用完的原因是我有一个我担心消耗太多的轮询循环资源(虽然每次轮询结果为负时我都使用Thread.Sleep(5))。 每次我需要并发进程时启动一个新线程会花费我宝贵的时间吗? 这应该是一个循环吗? 我的循环应该受到责备吗? 我可以给一个线程比其他线程更高的优先级,还是使用Thread.Sleep我唯一的选择? 如果我确定分配更高的线程优先级,我怎么能确定其他线程甚至可以存活? 为什么简单的表单事件会妨碍我的其他线程呢? 有没有办法为我的GUI线程分配较少量的资源? 如果其他线程的时钟时间不足,我可以使用Thread.Sleep以某种方式阻止Form事件吗? 如果没有我所有令人沮丧的问题的答案,是否有某种线程分析器可以用来帮助解决我的问题? 我尝试使用“托管堆栈资源管理器”,但不知何故,它并不总是显示我的应用程序有什么线程。 对此事的任何帮助都会对我有所帮助。