Tag: winforms

如何在Winform中使用multithreading?

我是multithreading的新手。 我有一个带有标签和进度条的winform。 我想显示处理结果。 首先,我使用Application.DoEvents()方法。 但是,我发现表格很冷。 然后我在MSDN上阅读了一些关于multithreading的文章。 其次,我使用BackgroundWorker来做到这一点。 this.bwForm.DoWork += (o, arg) => { DoConvert(); }; this.bwForm.RunWorkerAsync(); 表格不会冻结,我可以在处理时拖动/ drog。 不幸的是,它会抛出InvalidOperationException。 所以我必须使用它。 Control.CheckForIllegalCrossThreadCalls = false; 我确保这不是最终的解决方案。 专家,您有什么建议吗? 编辑:当我调用listview时抛出InvalidOperationException。 此代码位于DoWork()中。 foreach (ListViewItem item in this.listView1.Items) { //……..some operation lbFilesCount.Text = string.Format(“{0} files”, listView1.Items.Count); progressBar1.Value++; } Edit2:我在DoWork()中使用委托和调用,它不会抛出exception。 但forms再次冻结。 怎么做才能使表格在处理时可以放置/悬垂?

隐藏后如何再次显示表单?

我有两种forms。 我需要用按钮打开第二个表单。 当我打开form2时,我隐藏了form1。 但是,当我尝试使用按钮从form2再次显示form1时,它不起作用。 我的form1代码是: Form2 form2 = new Form2(); form2.ShowDialog(); 里面的form2代码: Form1.ActiveForm.ShowDialog(); 要么 Form1.ActiveForm.Show(); 要么 form1.show(); (form1 doesn’t exist in the current context) 不起作用。 我不想打开新表格 Form1 form1 = new Form1(); form1.ShowDialog(); 我想要展示我之前隐藏的forms。 或者我可以将它最小化到任务栏 this.WindowState = FormWindowState.Minimized; 并再次从form2最大化它。 Form2.ActiveForm.WindowState = FormWindowState.Maximized; 但是,我尝试的方式再次无效。 这些方法有什么问题?

为什么单击文本框会导致AutoScroll面板滚动回到顶部?

在C#应用程序中完成一个注册表单,我注意到如果我启用了AutoScroll,然后在滚动下方有一个文本框并点击它,它会一直跳到顶部。 有没有办法用一些代码解决这个问题或者它是否合适? 我用文字解释它有点困难,所以这是一个显示行为的简短video 。

在C#Winform上使用Show Dialog时非常奇怪的错误

我在VS Studio 2008 Express Edition中创建了2个表单,并在main program.cs文件中使用public static声明它们 我只是想用ShowDialog和Close在两个表单之间切换,但是当试图关闭第二个表单并再次使用showdialog打开第一个表单时,它表示当表单已经可见时我不能使用showDialog,而事实并非如此在显示第二个表格之前关闭它。 它让我在使用showdialog之前将form visible属性设置为false,所以我做到了 internal static void CloseSecondForm(FirstForm FirstForm) { FirstForm .Close(); SecondForm.Visible = false; SecondForm.ShowDialog(); } 但后来它说我不能使用ShowDialog,因为表格已经在对话模式中显示,我必须关闭它。 所以我做了它所要求的 internal static void CloseSecondForm(FirstForm FirstForm) { FirstForm .Close(); SecondForm.Visible = false; SecondForm.Close(); SecondForm.ShowDialog(); } 但它仍然假装已经使用ShowDialog打开了表单! 这是我的编程或Winform中的Bug吗? 更新:这是我在第5个答案中发布的整个代码(我想使用showdialog而不是show,因为我可能在后台有第3个表单,我不希望用户访问): [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 = new Form1(); Form2 = […]

在Visual C#Windows窗体中读取/写入PDF文件

对于客户端,我需要能够读取和写入PDF文件。 这有两个缺点: 我不知道怎么做。 我不能使用任何第三方copmonents /库。 有人可以指出我正确的方向,我可以学习如何开始阅读和写PDF文件? 我不是要求代码或类似的东西(虽然…..;)),我只是想知道是否有人知道任何好的起点……

如何获取XP,Vist和7中的所有用户帐户名,32位或64位以及任何操作系统语言

我有一个C#winform应用程序,将安装在Windows 7,Vista和XP机器上,32或64位,操作系统使用英语,德语和西class牙语(以及将来的其他语言)。 我需要在本地计算机上获取所有管理员和用户帐户名称的列表。 我只需要一个帐户名列表,仅此而已。 问题是我的代码仅适用于英语操作系统。 有没有办法在本地机器上获取用户名,无论操作系统的语言如何,无论是XP,Vista还是7,无论是32位还是64位? 我读了一篇关于使用SID来获取本地管理员名称的post,以防它被重命名。 使用SID可以帮助解决我的问题吗? 以下是我的代码。 在德语操作系统计算机上,代码在“DirectoryEntry admGroup = localMachine.Children.Find(”administrators“,”group“);”行上失败。 它最有可能失败,因为在德国操作系统中,“管理员”,“组”这两个词可能拼写不同。 对于西class牙语OS来说也是如此。 我的32位操作系统代码: DirectoryEntry localMachine = new DirectoryEntry( “WinNT://” + Environment.MachineName); DirectoryEntry admGroup = localMachine.Children. Find(“administrators”, “group”); object adminmembers = admGroup.Invoke(“members”, null); DirectoryEntry userGroup = localMachine.Children.Find(“users”, “group”); object usermembers = userGroup.Invoke(“members”, null); //Retrieve each user name. foreach (object groupMember in (IEnumerable)adminmembers) { […]

在WinForm上运行数字时钟

嗨,我必须设计一个具有简单文本框的Windows窗体。 文本框包含类似文本的计时器(00:00格式)。 我想每秒刷新页面,并使文本框的内容相应更改。 (就像数字时钟一样,运行一小时!)。 我想我需要使用System.Windows.Forms.Timer类,我已经将一个Timer项从ToolBox中删除到我的Form。 下一步…我需要使用Thread.Sleep(1000)函数..任何想法? 这是我一直在尝试的代码片段。 我知道程序出错了,而thread.sleep()部分甚至使我的代码运行更糟糕。 我在ToolBox中尝试了Timer的东西,但无法通过。(当我运行代码时,它成功编译,然后应用程序由于脏For-Loops冻结了一个小时)帮助!! public partial class Form1 : Form { Button b = new Button(); TextBox tb = new TextBox(); //System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer(); public Form1() { b.Click += new EventHandler(b_click); b.Text = “START”; tb.Text = “00 : 00”; //timer1.Enabled = true; //timer1.Interval = 1000; tb.Location = new […]

有没有办法在“添加或删除程序”中更改ClickOnce应用程序的图标?

我有一个使用ClickOnce技术部署的Windows应用程序。 有没有办法更改图像中显示的该应用程序的图标?

WinForms C#.Net 4.0中的function区

Microsoft是否为非Office应用程序提供了function区控件? 如果没有,有没有免费的? 我喜欢该组件,并希望使用它我的WinForm 4.0应用程序。

错误:mscorlib.dll中发生未处理的“System.UnauthorizedAccessException”类型exception

当我尝试将文件复制到某个位置时,这是崩溃并给我这个错误的部分。 string startupDirectory = “C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup”; File.Copy(startupDirectory, “Startup.exe”); 我已经在线阅读并尝试了管理员权限,并创建了一个“app.manifest”文件: 我确认在设置中,应用清单设置为此文件,但它仍然给我相同的错误。 我也尝试过这个事件虽然我认为它不会起作用,因为它是一个目录而不是一个文件: File.SetAttributes(startupDirectory, FileAttributes.Normal); 这是WinForms,我在Windows 7上,但也希望它适用于Windows 8+的世界。 我该怎么做呢? 提前致谢!