Tag: winforms

可以在后台线程上构造表单,然后在UI线程上显示

更新:只是总结一下我的问题归结为: 我希望构建.NET表单和控件不会创建任何窗口句柄 – 希望该过程被延迟到Form.Show/Form.ShowDialog 任何人都可以确认或否认这是否属实? 我有一个带有选项卡控件的大型WinForms表单,表单上有许多控件,在加载几秒钟后会暂停。 我已经将它缩小到InitializeComponent中设计器生成的代码,而不是构造函数或OnLoad中的任何逻辑。 我很清楚我不能尝试在主UI线程以外的任何线程上与UI进行交互,但我想做的是让应用程序预先加载这个表单(运行构造函数)在后台,所以只要用户想要打开它,它就可以立即在UI线程上显示。 但是,在后台线程中构建时,在设计器的这一行: this.cmbComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; 我收到了错误 在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。 确保您的Main函数标记了STAThreadAttribute。 现在,这是设计器文件的一半,这让我希望通常这种策略可行。 但是这条特殊的线似乎试图立即启动某种OLE调用。 有任何想法吗? 编辑: 我想我在这里并没有说清楚。 延迟似乎发生在设计人员生成的代码期间构建bazillion控件期间。 我希望所有这些初始化代码都是在没有真正尝试触摸任何真正的Win32窗口对象的情况下发生的,因为表单尚未实际显示。 我可以设置(例如)标签文本和位置来自这个后台线程的事实让我希望这是真的。 然而,对于所有房产而言可能并非如此。

如何将自己的主题应用于我的Windows窗体应用程序?

在C#中执行Windows窗体应用程序时, 窗体的视图看起来与Windows的主题相同。 如何将自己的主题提供给不依赖于Windows主题的应用程序?

背景键按下监听器

我有一个简单的窗口forms应用程序,当我按空格键时打开大写锁定,如果我按下一个字母则将其关闭。 问题是我必须专注于窗口才能工作(最顶层也不起作用,最顶层不会只关注它只显示窗口高于其他所有未聚焦的窗口)。 任何人都知道即使我在记事本中写作,我怎么能让它工作?

如何创建没有标签标题的TabControl?

如何制作不显示标题页眉的标签管理器? 这是一个winforms应用程序,使用选项卡管理器的目的是只能通过代码更改显示内容。 它适用于各种菜单选项更改屏幕内容的菜单。

如何在WinForms中播放声音?

如何用C#在WinForms中播放声音?

如何确定用户控件何时完全加载并显示?

stackoverflow上已经有一些类似的问题,但我还没有找到答案 我有一个由几个标签页组成的应用程序。 其中一个我一次只加载了几十个用户控件的列表。 目前我在Load事件中这样做,因为我在加载此页面之前有一点延迟。 我想要做的是使UI更具响应性,并在页面完全加载后填充列表。 有没有办法跟踪用户控件何时完全加载它的内容? VisibleChanged也没有帮助,因为它会在显示任何其他子控件之前触发。 当我开始加载控制列表时,当某些子控件仍然不可见时,这会导致一些丑陋的视觉效果。 编辑 为了使它更清楚。 我在页面容器上有一些子控件,我有一个我想要稍后加载的自定义控件列表。 以下几个答案中描述的两种方法的问题是,当我开始加载控件时,他们不会让容器上的其他子控件显示出来,这就是为什么我会有那些丑陋的效果(我正在这样做BackgroundWorker,但无论如何它必须与主线程交互以向列表添加控件)

DataGridView ID列不会隐藏

我有一个绑定到ObjectDataSource的DataGridView,其中一些列被隐藏,包括ID列。 问题是,即使将其visible属性设置为false,ID列也会显示。 有没有人遇到过这个问题? 将宽度设置为零不是一个选项,因为网格不允许宽度小于5像素宽的列,因此无论如何它仍然显示网格上的列。 奇怪的是ID列并不总是显示。 在我的应用程序上工作了一点后,列再次出现。 DataGridView未设置为自动生成列。 我正在构建到.NET和C#的4.0版本。 这是表单构造函数中的代码。 dgvActiveMiners.AutoGenerateColumns = false; dgvAvilableMiners.AutoGenerateColumns = false; dgvOperationResults.AutoGenerateColumns = false; dgvActiveMiners.Columns[“dgvActiveMinersRecordId”].Visible = false; dgvAvilableMiners.Columns[“dgvAvilableMinersRecordId”].Visible = false; dgvOperationResults.Columns[“dgvOperationResultRecordId”].Visible = false; 这是生成的网格代码。 this.dgvOperationResults.AllowUserToAddRows = false; this.dgvOperationResults.AllowUserToDeleteRows = false; this.dgvOperationResults.AutoGenerateColumns = false; this.dgvOperationResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvOperationResults.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dgvOperationResultRecordId, this.nameDataGridViewTextBoxColumn2, this.typeIdDataGridViewTextBoxColumn, this.amountDataGridViewTextBoxColumn, this.operationIdDataGridViewTextBoxColumn}); this.dgvOperationResults.DataSource = this.operationResultBindingSource; this.dgvOperationResults.Location = new System.Drawing.Point(12, […]

C#跨线程调用问题

我正在用c#编写一个表单应用程序,我需要能够从任何线程更改Rich Text Box的内容,我尝试使用委托和InvokeRequired ,但我做的委托仍然给我一个跨线程调用错误,和InvokeRequired崩溃表单,而不会给出错误。 函数我需要能够从任何线程执行: public static void updateSub(int what) { subDisplay.subBox.Text = tb[what]; } 我试图使用的代表: public delegate void UpdateDelegateVoid(int what); static public UpdateDelegateVoid uSub = new UpdateDelegateVoid(updateSub); uSub(0); 我的InvokeRequired代码: public static void updateSub(int what) { if (subDisplay.subBox.InvokeRequired) { subDisplay.subBox.Invoke(new MethodInvoker(finish)); } else { subDisplay.subBox.Text = tb[what]; } } 我不确定为什么上面的代码不起作用。 谢谢!

TextBox控件中的自动缩放字体,使其尽可能大,仍然适合文本区域边界

我需要一个TextBox或某种类型的多行标签控件,它会自动调整字体大小,使其尽可能大,但整个消息都适合文本区域的边界。 我想看看是否有人在开发自己的用户控件之前实现了这样的用户控件。 示例应用程序:有一个TextBox,它将是Windows窗体上一半的区域。 当出现大约100-500个字符的消息时,它将把所有文本放在控件中并将字体设置得尽可能大。 使用Mono Supported .NET库的实现将是一个优势。 如果知道一个人已经实现了一个控件……如果有人知道如何测试一个给定的文本是否完全适合文本区域,如果我滚动自己的控件那将是有用的。 编辑:我最终编写了RichTextBox的扩展。 一旦我确认所有的问题都解决了,我会立即发布我的代码。

Application.Idle事件的意义

我对Application.Idle事件的了解是,应用程序正在完成其处理并即将进入空闲状态。 我读到了某个地方 如果您在线程空闲之前必须执行任务,请将它们附加到此事件 那么这是否意味着任务将在线程空闲之前或线程变为空闲之后执行? 我的项目中有一些代码,如下所示。 数据库更新是否在空闲时间执行? private void Application_Idle(object sender, EventArgs e) { // Update the explorer’s menuitems team.UpdateMenu(); // Update display toolbars. team.UpdateToolBar(); // Update SaveAll SaveAll.Enabled = teaj.IsModified; Up.Enabled = team.CanNavigateUp; …