Tag: winforms

单线公寓问题

从我的mainform我打电话给以下打开一个新表格 MyForm sth = new MyForm(); sth.show(); 一切都很好但是这个表单有一个combobox,当我将其AutoCompleteMode切换为建议和附加时,我在显示表单时遇到了这个exception: 在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。 确保您的Main函数标记了STAThreadAttribute。 我已根据exception的请求在我的main函数上设置了此属性: [STAThread] static void Main(string[] args) { … 我可以请一些帮助来了解可能出错的地方。 示例代码: private void mainFormButtonCLick (object sender, EventArgs e) { // System.Threading.Thread.CurrentThread.SetApartmentState(ApartmentState.STA); ? MyForm form = new MyForm(); form.show(); } 设计师: this.myCombo.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; this.myCombo.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.myCombo.FormattingEnabled = true; this.myCombo.Location = new System.Drawing.Point(20, 12); this.myCombo.Margin = […]

“SelectedIndexChanged”在ListBox中的“Items.Clear()”之后没有触发

对于ListBox(选择模式设置为One),我希望跟踪是否选择了所选项目。 为此,我向SelectedIndexChanged订阅了一个方法,并检查SelectedIndex是否为-1。 但是,我注意到在调用Items.Clear()之后事件不会触发,即使SelectedIndex更改为-1(如果它还不是-1)。 为什么不开火呢? 我知道我可以通过在清除列表之前为SelectedIndex分配-1来解决这个问题。 但有更好的方法吗? 这是一个复制它的简单代码: using System; using System.Windows.Forms; namespace ns { class Program { static ListBox lst = new ListBox(); public static void Main() { lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged); lst.Items.Add(1); Console.WriteLine(“Setting selected index to 0…”); lst.SelectedIndex = 0; //event fire here Console.WriteLine(“(Selected Index == {0})”, lst.SelectedIndex); Console.WriteLine(“Clearing all items…”); lst.Items.Clear(); //event *should* […]

this.TopMost = true不工作?

我是C#的新手,仍然试图让我的头脑(在一些非常耐心的朋友的帮助下)。 我有一个问题,将新窗体的TopMost属性设置为true 。 我有两个(几乎)相同的forms; 1工作正常,而不工作。 这两种forms都将TopMost属性设置为true 。 Form1显示窗口,当我尝试在其后面单击时,表单闪烁几次并发出一声窗口蜂鸣声。 Form2也显示了表单,但是当我在其后面单击时,表单会变灰(或失去焦点),我可以在主表单上单击。 我已经搜索了这个问题的答案,并找到了一个答案,建议把this.TopMost = true; 在表单的加载事件但但不起作用。 我改变的唯一可能或可能没有影响的是Form1是在属性中设置.NET 4.5创建的,在创建Form2之前,我将其更改为.NET 3.5(客户端配置文件)。 我试过把它改回来,但它没有帮助。 在我再次删除并创建Form2之前,有没有人有任何想法? 提前谢谢了。 (如果您需要更多信息,请告诉我们)

typeof()检查数值

什么是检查typeof()是否在数学上可用(数字)的最简单方法。 我需要使用TryParse方法或检查它: if (!(DC.DataType == typeof(int) || DC.DataType == typeof(double) || DC.DataType == typeof(long) || DC.DataType == typeof(short) || DC.DataType == typeof(float))) { MessageBox.Show(“Non decimal data cant be calculated”); return; } 如果有更简单的方法来实现这一点,你可以自由地建议

如何制作图像按钮

我想知道我怎么能这样做。 我知道我可以使用按钮组件,但当我给它一个图像时它周围有一些灰色的东西。 使用图像按钮,我如何显示hover效果的另一个图像

MouseDown和Click冲突

我在form_MouseDown事件上有一个Drag()方法。 我在表单上也有一个点击事件。 问题是,如果我单击表单,MouseDown事件将被触发,它永远不会有机会触发click事件。 解决这个问题的最佳方法是什么? 如果表单实际被拖动,我正在考虑计算像素,但必须有更好的方法。 有什么建议?

设置只读文本框默认Backcolor

我有一个TextBox ,它被设置为ReadOnly。 在某些时候,TextBox可用于编辑,并且它的BackColor发生了变化(它指示值是否有效)。 如果我想将Texbox设置回ReadOnly,则TextBox不会返回ReadOnly TextBox获得的原始BackColor。 我该怎么办才能再次获得原始颜色? 我意识到我可以手动将颜色设置为SystemColors.Control ,但这是“正确的方法”吗? 代码示例 这是一个简单的演示代码。 如果SystemColors.Control是要走的路,我将在ReadOnlyChanged事件中更改它… private void button1_Click(object sender, EventArgs e) { //At this point this.textBox1 is ReadOnly this.textBox1.ReadOnly = false; this.textBox1.BackColor = Color.Orange; /*this.textBox1.BackColor = SystemColors.Control;*/ //Is this the right way? this.textBox1.ReadOnly = true; //Textbox remains orange… }

如何在多行文本框中不断滚动到文本末尾?

我正在使用计时器更新文本框。 每次计时器滴答我都被重定向到我的多行文本框中键入的文本的开头。 这该怎么做?

线程中的TopMost表单?

我使用以下代码在新线程中打开一个表单: private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(ThreadProc); thread.Start(); } public void ThreadProc() { Form form = new Form(); form.TopMost = true; form.ShowDialog(); } 但是,即使我将其设置为true,新创建的表单也不是TopMost。 如何在线程TopMost中创建表单?

在winform TextBox中自动完成开头

// [in designer] textBoxInContext.AutoCompleteMode = Suggest // [in designer] textBoxInContext.AutoCompleteSource = CustomSource AutoCompleteStringCollection autoComplete = new AutoCompleteStringCollection(); autoComplete.AddRange(myArrayofStrings); textBoxInContext.AutoCompleteCustomSource = autoComplete; 我有这个代码,如MSDN中记录的那样运行良好。 问题:如果用户键入“PS”,则显示以“PS”开头的所有字符串; 我想显示包含“PS”的所有字符串 有什么指针吗?