精华内容
下载资源
问答
  • 不是在子窗口使用主窗口的控件 是修改控件,不是变量 我要实现的具体功能是在窗口单击按钮打开一个新窗口,此时该按钮失效,当关闭打开的新窗口时,激活该按钮。这样做的目的是为了避免每点击一次该按钮,就生成一个...

    说明

    1. 不是在子窗口使用主窗口的控件
    2. 是修改控件,不是变量
    3. 我要实现的具体功能是在窗口单击按钮打开一个新窗口,此时该按钮失效,当关闭打开的新窗口时,激活该按钮。这样做的目的是为了避免每点击一次该按钮,就生成一个新窗口(除非确实有该需要),当然如果将该按钮的单击触发事件改为Showdialog()就不用考虑该问题,但这样就不能同时操作两个窗口(如果没有该需要可以这样做),我目前的单击触发事件为Show()
    4. 下面我介绍的方法不仅仅针对我的需求,如果有同样问题不同需求的读者同样可以参考

    实现方法1

    1. 创建主窗口Form1,略
    2. 在主窗口添加按钮Button,修改Name属性为:newForm
    3. 创建新窗口,Form2 ,略
    4. 添加按钮newForm的单击触发事件,方法:略
      代码:
      private void newForm_Click(object sender, EventArgs e)
            {
            	//将当前Form1的窗口对象以参数传到新建的Form2的对象中(通过含参构造器)
            	//这样Form2的对象就可以使用Form1对象中的控件了。
                Form2 fm2 = new Form2(this);
                fm2.Show();//我使用的是Show()不是Showdialog()
                newForm.Enabled = false;//让该按钮失效
                
            }
    
    1. 修改该按钮的属性:设计-Modifiers为public,让其在外部可访问
    2. 在Form2的代码中,新增一个Form1的对象,新增一个含参的构造器
      代码
    private Form1 fm1;
            public Form2()
            {
                InitializeComponent();
            }
            public Form2(Form1 fm1)
            {
                InitializeComponent();
                this.fm1 = fm1;
            }
    
    1. 设置该窗口的关闭触发事件,这个在窗体的触发事件中可以找到,有两个,我用的是Closed
      在这里插入图片描述
    2. 添加关闭窗口触发事件
     private void Form2_FormClosed(object sender,FormClosedEventArgs e)
            {
    			//激活主窗口的newForm按钮
                fm1.newForm.Enabled = true;
    
            }
    
    1. 完整代码
      主窗体Form1
    namespace WFATest2
    {
        public partial class Form1 : Form
        { 
          
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
    
            }
    
            private void newForm_Click(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2(this);
                fm2.Show();
                newForm.Enabled = false;
                
            }
        }
    }
    

    子窗体Form2

    namespace WFATest2
    {
        public partial class Form2 : Form
        {
            private Form1 fm1;
            public Form2()
            {
                InitializeComponent();
            }
            public Form2(Form1 fm1)
            {
                InitializeComponent();
                this.fm1 = fm1;
            }
            private void Form2_FormClosed(object sender,FormClosedEventArgs e)
            {
    
                fm1.newForm.Enabled = true;
    
            }
        }
    }
    
    

    启动展示

    启动Form1

    在这里插入图片描述

    点击newForm,生成Form2

    在这里插入图片描述
    可以看到newForm的按钮已变灰,同时,我可以同时对这两个窗口操作,不受影响

    关闭Form2

    在这里插入图片描述
    newForm按钮已激活

    实现方法2

    在创建新窗口的方法中就注册一个新窗口关闭时的事件

      private void newForm_Click(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2(this);
                fm2.Show();
                newForm.Enabled = false;
                fm2.Closed += Fm2_Closed;
                
            }
     private void Fm2_Closed(object sender, EventArgs e)
            {
                newForm.Enabled = true;
            }
    
    
    
    展开全文
  • 1,从父窗体向窗体传值 // 从父窗体向窗体传值 private void btnParent_click(object sender, ... // 方法二 通过公共变量传值,如果这个变量是在父窗体中声明的,那么需要时静态变量 // FrmChild chidl = ne

    1,从父窗体向子窗体传值

    // 从父窗体向子窗体传值
    private void btnParent_click(object sender, EventArgs e){
    	//方法一 通过重写构造函数传值 重写子窗体的构造函数
    	// FrmChild chidl = new FrmChild(txtParent.Text);
    	// child.ShowDialog();
    
    	// 方法二 通过公共变量传值,如果这个变量是在父窗体中声明的,那么需要时静态变量
    	// FrmChild chidl = new FrmChild();
    	// strValue = textParent.Text;
    	// clhild.ShowDialog();
    	
    	// 方法三 通过在子窗体中声明公共变量
    	FrmChild child = new FrmChild();
    	child.strValue = txtParent.Text;
    	child.ShowDialog();
    }
    

    2,从子窗体向父窗体传值

    public FrmChild(string textValue){
    	InitializeComponment();
    	txtChild.Text = textValue;
    }
    private void btnChild_Click(object sender, EventArgs e){
    	// 方法一 将父窗体设置为当前子窗体的拥有者
    	// FrmParent parent = (FrmParent)this.Owner;
    	//parent.Controls["txtParent"].Text = textChild.Text;
    	
    	//方法二 创建一个赋值的方法
    	// FrmParent parent = (FrmParent)this.Owner;
    	// parent.SetValue(txtChild.Text);
    
    	// 方法三 
    	FrmParent parent = (FrmParent)this.Owner;
    	parent.SetTextValue = txtChild.Text;
    }
    
    展开全文
  • C#子窗口操作父窗口控件的方案 先在子窗体中定义一个父窗体的变量,接着重写窗体类无参变量构造函数,增加一个窗体对象形参,然后把传入的形参赋值给最开始定义的父窗体变量。 接着在父窗在定义该子窗体的变量...

    C#子窗口操作父窗口控件的方案

    1. 先在子窗体中定义一个父窗体的变量,接着重写窗体类无参变量构造函数,增加一个窗体对象形参,然后把传入的形参赋值给最开始定义的父窗体变量。
      示例

    2. 接着在父窗在定义该子窗体的变量时把自己作为形参传入子窗体构造函数中。
      示例

    3. 然后在子窗体需要用到父窗体某一控件的地方“抓”出该控件来,其格式有点像Android中使用某一控件做的捕获操作。

      该示例为子窗体捕获父窗体中名为listView_show的ListView控件
      示例
      最后就可以在子窗体中愉快地使用父窗体中的ListView控件了!

    展开全文
  • 两个winform窗体上分别有两个TEXTBOX控件,当点击弹出子窗口按钮时,会弹出子窗口。当在子窗体的TEXTBOX控件上输入文本时,内容会同步到父窗体的TEXTBOX控件上。 二 : 显示效果 三 代码 1 程序入口 using ...

    一 : 需求

    两个winform窗体上分别有两个TEXTBOX控件,当点击弹出子窗口按钮时,会弹出子窗口。当在子窗体的TEXTBOX控件上输入文本时,内容会同步到父窗体的TEXTBOX控件上。

    二 : 显示效果


    三 代码

    1   程序入口

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
           public static string str = "";//定义静态变量,用于存放窗体间传递的字符串
            [STAThread]
           
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new ParentFrm());//启动父窗体
            }
        }
    }
    


    
    

    
    

    2 父窗体

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class ParentFrm : Form
        {
            public ParentFrm()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)//点击事件
            {
                ChildFrm childFrm = new ChildFrm();
                childFrm.Show();//显示子窗体
                Thread thread = new Thread(() =>
                {
                    while (true)
                    {
                        this.TbParent.Invoke(new Action(() => { this.TbParent.Text = Program.str; }));//夸线程访问,取出静态变量的值放入放入父窗体的TEXTBOX控件中显示
                    }
                  
                });
                thread.Start();//启动线程
            }
        }
    }
    


    3 子窗体

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class ChildFrm : Form
        {
            public ChildFrm()
            {
                InitializeComponent();
            }
    
            private void TbChild_TextChanged(object sender, EventArgs e)
            {
                
                Program.str = this.TbChild.Text;//将用户输入到子窗体TEXTBOX控件中的内容放入到静态变量中
                
            }
        }
    }
    

    四  问题

    是不是可以不用静态变量来存放字符串?

    可以,都在父窗体点击按钮事件里拿到子窗体对象了,怎么还用Program类中设置的静态变量?应该可以直接在ChildFrm类里设置静态变量或者属性。(请看下篇)

    展开全文
  • 然后用这个父窗体对象就可以在窗体的任何位置直接使用它的参数了(这些参数要定义成公共的),将父窗体对象定义成子窗体的一个变量,不是在Load中定义父窗体对象,只是在Load中获取父窗口,这样在窗体的任何位置...
  • 建立一个带参数的form构造函数以及一个成员变量,在form实例化时将父窗口的“指针”传给子窗口,然后再使用。 下面说说新的考古发现: winform:  包含Form owner和Control parent两个属性,前一个表示父窗口,...
  • 做一个登录窗口,登录成功时关闭form1,展示from2界面 1.主界面Login 1 namespace WindowsFormsApplication1 2 { ... 3 public partial class Login : Form ...//定义一个变量窗体传值 ...
  • winForm判断窗体是否存在

    千次阅读 2009-11-16 20:23:00
    经常使用的一种判断窗体对象是否存在的方法,即在主窗体中定义子窗体的对象,赋值为null,然后在要使用该子窗口的函数中做如下判断即可。 即判断窗体对象是否为null或者是否已释放。 在窗体中定义全局变量(即窗口...
  • 窗体间的数据传递的几种方法: 1.通过子窗体的Tag属性 2.借助第三方的一个静态变量 3.通过父窗体的Tag属性 局限性:必须得有一个窗体已经关闭,数据才能传递过去 ...当用户点击子窗口的“添加...
  • 做一个登录窗口,登录成功时关闭form1,展示from2界面 1.主界面Login namespace WindowsFormsApplication1 ... public partial class Login : Form ...//定义一个变量窗体传值 public...
  • 632排列子窗口 错误未定义书签。 64图像列表( mageList控件… 134 65工具栏( ToolStrip控件) 135 66 状态( StatusStrip) 138 67选项卡( TabControl Timer控件 69 MD综合示例 错误!定义书签 任务实训部分……143 1...
  • c#中如何得到子窗口上的控件值?   方法1:将textBox1定义为public,不推荐 (在A项目中用一个内存变量存值.并设为PUBLIC. 在B项目中引用A项目。获取需要的值。 用的时候注意 using A的命名空间。)   方法...
  • LogviewListview.zip

    2020-07-14 21:48:48
    LogviewList使用说明 WinForm: 1. 需要在using 中申请变量引用,避免一长串调用 ...4. 所有设置已经在控件中预设完成,当然也可以在调用窗口中单独设置,设置方法,父控件控件属性或事件设置
  • C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 ...
  • 1.4.1 继承——“承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...
  • 1.4.1 继承——“承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...
  • 1.4.1 继承——“承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...
  • 1.4.1 继承——“承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...
  • asp.net知识库

    2015-06-18 08:45:45
    .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 ...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

winform子窗口变量