Tag: 形成

创建多个表单GUI

我正在c#中开发一个非常基本的应用程序Windows Form Application,它将值插入到SQL数据库中。 我有四种不同的forms 一个用于输入客户详细信息 一个用于输入任何交易细节 一个用于分别搜索客户/交易。 将所有四种forms联系在一起的最佳方式是什么? 我只是进入C#所以最基本的方式是理想的。 我认为它在我脑海中工作的方式是你运行程序并最终在一个屏幕上显示四个相应表格的四个按钮。 当您按下按钮时,会打开一个单独的窗口,显示插入表单。 然后,您可以关闭表单以返回主开始屏幕 C#中的基本代码是什么? 例如,可以说5种不同的布局 Main (包含按钮) TransactionEntry AddressEntry TransactionSearch AddressSearch

C#如何将变量传递给另一个表单

我正在尝试添加一个搜索按钮,所以当我点击按钮时,它会打开另一个框,允许我输入我想要搜索的内容然后按搜索。 但我似乎无法从form2中的form1访问我的arraylist和我的DataStructure。 所以我想知道如何传递这些变量,以便我可以在我的form2中访问它们 #region Variables FootballClub PlayerMemberData = new FootballClub(0); ArrayList ClubData = new ArrayList(); public int CurrentPlayerShown = 0; // Path to the file for loading/saving. Note the ‘@’ sign in front of the string. Without it all ‘\’ have to be double ‘\\’ string PlayerDetails = @”C:\Users\Clare\Desktop\Football_Player.txt”; #endregion #region DataStructure // ==============================The Data […]

通知窗口 – 防止窗口获得焦点

我在收到通知框以在c#中正常运行时遇到一些问题。 基本上我在屏幕的右下方显示一个无边框forms,它显示一条消息几秒钟然后消失。 问题是我需要它出现在其他窗口的顶部,而不能偷取焦点。 理想情况下,我希望它是纯粹的托管代码,虽然通过类似的例子我怀疑这是可能的。 目前我在使用覆盖调用Form.Show()时阻止它窃取焦点: protected override bool ShowWithoutActivation // stops the window from stealing focus { get { return true; } } 然后忽略鼠标点击: private const int WM_MOUSEACTIVATE = 0x0021; private const int MA_NOACTIVATEANDEAT = 0x0004; protected override void WndProc(ref Message m) { if (m.Msg == WM_MOUSEACTIVATE) { m.Result = (IntPtr)MA_NOACTIVATEANDEAT; return; } base.WndProc(ref m); […]

WinForms编程 – 模态和非模态forms问题

我在C#.NET下的表单模态有问题。 假设我的主要forms为#0(见下图)。 此表单代表主要的申请表,用户可以在其中执行各种操作。 但是,有时需要打开其他非模态表单来执行支持任务的其他主要应用程序function。 让我们说这是图像中的#1表格。 在这个#1表单上可能会打开几个额外的模态表单(图像中的#2表单),最后,有一个进度对话框显示一个长的操作进度和状态,这可能需要几个几分钟到几个小时。 问题是,在关闭所有模态窗体(图像中的#2)之前,主窗体#0不响应。 我需要主要forms#0在这种情况下可以运行。 但是,如果您在表单#2中打开非模态表单,则可以使用模式#2表单和新创建的非模态表单。 我需要主表单#0和表单#1与其所有子表单之间的相同行为。 可能吗? 或者我做错了什么? 也许有某种解决方法,我真的不想将所有ShowDialog调用改为Show … 图片http://img225.imageshack.us/img225/1075/modalnonmodalproblem.png

定时器不会打勾

我的代码中有一个Windows.Forms.Timer ,我执行了3次。 但是,计时器根本没有调用tick函数。 private int count = 3; private timer; void Loopy(int times) { count = times; timer = new Timer(); timer.Interval = 1000; timer.Tick += new EventHandler(timer_Tick); timer.Start(); } void timer_Tick(object sender, EventArgs e) { count–; if (count == 0) timer.Stop(); else { // Do something here } } 从代码中的其他位置调用Loopy() 。

如果没有其他实例打开表单打开 – 将类型传递给方法

我想简化一些代码。 因此,如果某个表格已经打开,我想制作一个检查function。 现在,我的开始表单上的每个按钮后面都有代码。 private void button_parts_Click(object sender, EventArgs e) { FormCollection fc = Application.OpenForms; foreach (Form frm in fc) { if (frm is frm_parts) { return; } } frm_Teile newForm = new frm_parts(); newForm.Show(); } 现在我希望有类似的东西: private void button_parts_Click(object sender, EventArgs e) { StartNewForm(frm_parts); } private void StartNewForm(Type myForm) { FormCollection fc = Application.OpenForms; foreach […]

WS_EX_TRANSPARENT – 它实际上做了什么?

在我的项目中,我创建了一个由用户控制的不透明度的表单。 如果表单是完全透明的,那么鼠标事件会“通过”(没有我的干预),否则我的表单会处理它们。 在阅读此问题并覆盖CreateParams属性以在WS_EX_TRANSPARENT上设置WS_EX_TRANSPARENT标志后,它现在允许鼠标事件在不透明度为任何值<255时通过。 这正是我想要的,但它让我担心我不明白它为什么会起作用。 根据我的阅读,WS_EX_TRANSPARENT旨在通过在Paint方法中从其下面的表单中“窃取位”使表单显得透明,因此: 我的表单的Paint方法及其中的所有控件都不应该被调用,对吧? 由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,那么为什么它会影响输入处理而不影响我的表单? 不透明度应该对鼠标事件的处理没有影响,就像要覆盖Paint一样,“局部”不透明度应该不重要,不是吗? 有人可以解释一下,这面旗帜究竟是做什么的 它是如何工作的?

如何将CenterParent转换为非模态forms

我有一个非模态子表单,从父表单打开。 我需要将子表单居中到其父表单。 我已将子表单的属性设置为CenterParent并尝试了此操作: Form2 f = new Form2(); f.Show(this); 但无济于事。 这适用于模态forms,但非模态forms则不然。 任何简单的解决方案,还是需要我通过所有数学计算来确定其位置为中心?

System.Windows.Forms.TextBox中未显示的Unicode字符

当我从VisualStudio调试器中剪切并粘贴它们时,这些字符显示正常,但是在调试器和我尝试显示此文本的TextBox中,它只显示正方形。 说明\ r \ n海流受季风影响,3-9月份其流向主要向北,流速为2节,有时达3节; 10月至次年4月份其流向南至东南方向,流速为2节。 r \ñ注意\ r \ n附近有火山爆发的危险,航行时严加注意\ r \ n 我认为TextBox支持Unicode文本。 知道如何在我的应用程序中显示此文本吗?

如何在C#中显示前面的表格

伙计们, 请问有没有人知道如何从一个看不见的应用程序中显示一个表单, 并让它获得焦点(即出现在其他窗口的顶部)? 我在C#.NET 3.5中工作。 我怀疑我采取了“完全错误的做法”……我没有 Application.Run(新的TheForm())而不是我(新的TheForm())。ShowModal() … Form基本上是一个模态对话,带几个复选框; 文本框,以及确定和取消按钮。 用户勾选一个复选框并输入描述(或其他)然后按OK,表单消失,进程从表单中读取用户输入,处理它,然后继续处理。 这是有效的,除非表单显示它没有得到焦点,而是它出现在“主机”应用程序后面,直到你在任务栏中点击它(或其他)。 这是一个最烦人的行为,我预测会导致许多“支持调用”,而现有的VB6版本没有这个问题,所以我在可用性方面倒退了…用户不会接受(并且也不应该)。 所以…我开始认为我需要重新考虑整个shebang …我应该预先显示表单,作为“正常应用程序”并将处理的剩余部分附加到OK按钮单击事件。 它应该工作,但这需要时间,我没有(我已经超过时间/预算)…所以首先我真的需要尝试使当前的方法工作…即使快速和 – 脏的方法。 所以,请有人知道如何“强制”.NET 3.5表格(通过公平的方式或家禽)来获得焦点? 我在想“魔术”的Windows API调用(我知道 Twilight Zone:这似乎只是工作中的一个问题,我们在Windows XP SP3上使用Visual Studio 2008 …我刚刚在家中无法使用SSCCE(见下文)重现问题关于Vista Ulimate的C#2008 ……这很好用。 咦? WTF? 另外,我发誓昨天在工作时显示了我运行EXE时的表格,但不是直接从IDE(我刚刚忍受的)F5’(或Ctrl-F5’ed)时… …在家里表格显示正常。 Totaly confusterpating! 它可能相关,也可能不相关,但Visual Studio今天早上在调试模式下运行并“动态”编辑代码时崩溃并烧毁…它被卡住了我认为是无限循环的错误消息。 错误消息是关于“无法调试此项目,因为它不是当前项目,或者其他东西……所以我只是使用进程资源管理器将其删除。它再次启动,甚至提供恢复”丢失“文件,我接受的报价。 using System; using System.Windows.Forms; namespace ShowFormOnTop { static class Program { [STAThread] static void Main() […]