精华内容
下载资源
问答
  • 本文中以主窗体为frmMain,子窗体为frmGroup ,两窗体之间传值来做示例。 方式一: 使用公共静态变量传值窗体frmMain中代码 public partial class frmMain : Form { //声明工位ID 为公共静态变量 public ...
  • C#winform窗体传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体...
  • 本文介绍了几种窗体之间传值的方式,主要是父窗体和子窗子之间调用数据的传递,内附代码,供初学者参考。
  • WinForm 窗体之间传值

    2013-04-25 16:24:08
    本地环境下可以传值到第三方的程序窗体容器的类似文本框内
  • Winform窗体之间传值(子窗体传给父窗体)代码实例; 通过构造函数、公开窗体中的控件,引用类型进行窗体之间传值
  • Winform窗体之间传值

    2018-04-11 13:27:17
    第一次在CSDN上写博客,面对这么多大牛...最近学会了Winform窗体传值,可能是最基础的方法,但是自己亲测过确实有效果,也是为了避免以后自己忘记,整理了一下,希望各位大神勿喷。第一步:第二步:第三步:效果:...

    第一次在CSDN上写博客,面对这么多大牛感觉压力有点大....最近学会了Winform窗体间传值,可能是最基础的方法,但是自己亲测过确实有效果,也是为了避免以后自己忘记,整理了一下,希望各位大神勿喷。


    第一步:


    第二步:


    第三步:



    效果:


    展开全文
  • WinForm窗体之间传值

    2017-03-07 09:28:00
    vb.net在自制的窗体控件中弹出一个窗口再返回一个值 例如:正在自制一个控件A,在A中有一个按钮BUTTON1和变量X.按下BUTTON1就会弹出一个已经制作好的WINDOS窗体FROM2,在FROM2中有textbox1,在关闭FORM2时,将textbox1...

     

    vb.net在自制的窗体控件中弹出一个窗口再返回一个值

    例如:正在自制一个控件A,在A中有一个按钮BUTTON1和变量X.按下BUTTON1就会弹出一个已经制作好的WINDOS窗体FROM2,在FROM2中有textbox1,在关闭FORM2时,将textbox1中的值赋给控件A中的变量X

    先设计好Form1和Form2。

    在Private Class Form2中输入
    Public Event ChangeValue(ByVal value As String) '是string还是其它的看你需要了

    在Form2的Closed事件:

    Private Sub Form2_Closed() Handles Me.Closed
        RaiseEvent ChangeValue(TextBox1.Text)'如果是数值类型的话用下面这个:
        'RaiseEvent ChangeValue(Val(TextBox1.Text))
    End Sub


    在Form中定义x:
    Dim x As String '是String还是数值类型看你需要了,要和上面的统一
    在Form1中写一个处理值的函数。值哪来?别管它

    Private Sub ProcessValue(ByVal value As String) '记得统一
        x = value
    End Sub


    在Form1中Button1的Click事件中:

    Private Sub Button1_Click() Handles Button1.Click
      Dim f2 As New Form2
      AddHandler f2.ChangeValue,AddressOf ProcessValue
      f2.Show()
    End Sub

    https://zhidao.baidu.com/question/553583369.html

     

    ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

     

    WinForm构造函数传值

    http://blog.csdn.net/zbssoft/article/details/5586306

     

    在WinForms程序里实现窗体传值的最佳实践

    http://bbs.csdn.net/topics/360140208

     

    windows form (窗体) 之间传值小结

    http://www.cnblogs.com/JoshuaDreaming/archive/2010/11/17/1880060.html

     

    C# form 传参数

    http://www.cnblogs.com/Asa-Zhu/archive/2012/12/06/2805074.html

     ========================================

     

    '自己的代码

     

    '我的例子

    '弹出的子窗口 Public Class ChildForm Dim temp As String = "" Public Event returnValue(ByVal value As String) Public Sub New(ByVal Cd) InitializeComponent() temp = Cd End Sub Private Sub ChildForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load txtAAA.Text = temp '父窗口传过来的值获取到 End Sub Private Sub F12_Click(sender As Object, e As EventArgs) Handles F12.Click RaiseEvent returnValue("传回父窗口的值") Me.Close() End Sub End Class
    '父窗口 Public Class ParentForm Private Sub F2_Click(sender As Object, e As EventArgs) Handles F2.Click Dim childForm = New ChildForm("传给弹出子窗口的值") childForm.Show() AddHandler childForm.returnValue, AddressOf ProcessReturnValue End Sub Private Sub ProcessReturnValue(ByVal value As String) txtTest.Text = value '子窗口传回的值获取到 End Sub End Class

     

    转载于:https://www.cnblogs.com/neru/p/6513044.html

    展开全文
  • 进行用C#来开发windows应用程序项目时,不同窗口之间传值有很多种不同的方法, 假设项目中有两个窗体,Form1和Form2,要实现的效果是:点击Form1中的按钮打开From2,点击Form2中的按钮改变窗体Form1的背景颜色。...
  • 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 1 2 3 4 5 6 7 8 intvalue1; stringvalue2; publicForm2(intvalue1,string...

    1、通过构造函数

    特点:传值是单向的(不可以互相传值),实现简单

    实现代码如下:

    在窗体Form2中   

    1

    2

    3

    4

    5

    6

    7

    8

    int value1;

    string value2;

    public Form2 ( int value1 , string value2 )

    {

        InitializeComponent ( );

        this.value1 = value1;

        this.value2 = value2;

    }

    在窗体Form1中这样调用

    1

    new Form2 ( 111 , "222" ).Show ();  //这样就把111,"222",这2个值传送给了Form2

    2、通过静态变量

    特点:传值是双向的,实现简单

    实现代码如下:

    1

    2

    3

    4

    5

    在一个app类中定义一个静态成员value

    public class app

    {

      public static string value;

    }

    在窗体Form1中这样调用

    1

    2

    3

    4

    5

    app.value = "f2";        //给静态成员赋值

    new Form2 ( ).Show ( );  //显示Form2

    在窗体Form2中     

    this.Text = app.value;  //取回app.value的值

    app.value = "Form2";    //给app.value赋值,以便其他窗体调用

    3、通过窗体的公有属性值

    特点:实现简单

    实现代码如下:

    在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    public string Form2Value

    {

        get

        {

            return this.textBox1.Text;

        }

        set

        {

            this.textBox1.Text = value;

        }

    }

    在窗体Form1中这样调用

    1

    2

    3

    Form2 f2 = new Form2 ( );

    f2.Form2Value = "Ok";     //给Form2的textBox1赋值Ok

    f2.ShowDialog (  );

    4、通过窗体的公有属性值和Owner属性

    特点:实现简单,灵活

    实现代码如下:

    在窗体Form1中

    1

    2

    3

    public int Form1Value = 1;

    Form2 f2 = new Form2 ( );

    f2.ShowDialog ( this );       //把Form1作为Form2的所有者传递给Form2

    在窗体Form2中

    1

    2

    3

    4

    5

    6

    //Form2的所有者是Form1

    Form1 f1 = ( Form1 ) this.Owner;

    //取到Form1的值是1

    MessageBox.Show ( f1.Form1Value .ToString ( ) );

    //给Form1的Form1Value赋值222

    f1.Form1Value = 222;

    5、通过窗体的公有属性值和Application.OpenForms属性

    说明:Application.OpenForms属性:获取属于应用程序的打开窗体的集合。(此属性在 .NET Framework2.0版中)

    实现代码如下:

    在窗体Form1中

    1

    2

    3

    public int Form1Value = 1;

    Form2 f2 = new Form2 ( );

    f2.Show ( );

    在窗体Form2中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    string formName = "Form1";

    Form fr = Application.OpenForms [ formName ];

    if ( fr != null )

    {

        Form1 f1 = ( Form1 ) fr;

        //取到Form1的值是1

        MessageBox.Show ( f1.Form1Value.ToString ( ) );

        //给Form1的Form1Value赋值222

        f1.Form1Value = 222;

    }

    6、通过事件

    实现代码如下:

    在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值

    并且还定义一个accept事件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    public string Form2Value

    {

        get

        {

            return this.textBox1.Text;

        }

        set

        {

            this.textBox1.Text = value;

        }

    }

    public event EventHandler accept;

          

    private void button1_Click ( object sender , EventArgs e )

    {

        if ( accept != null )

        {

            accept ( this , EventArgs.Empty );  //当窗体触发事件,传递自身引用

        }

    }

    在窗体Form1中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Form2 f2 = new Form2 ( );

    f2.accept += new EventHandler ( f2_accept );

    f2.Show ( );

    void f2_accept ( object sender , EventArgs e )

    {

     //事件的接收者通过一个简单的类型转换得到Form2的引用

        Form2 f2 = (Form2) sender;

     //接收到Form2的textBox1.Text

        this.textBox1.Text = f2.Form2Value;

    }

    展开全文
  • 本文实例讲述了WinForm窗体传值的方法。分享给大家供大家参考。具体实现方法如下: 窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式:   1.公共静态变量; 2.使用共有属性; 3....
  • 观察者模式的应用:Winform窗体传值 观察者模式的概念: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并更新。 今天我们就学着用一下这个观察者模式,先想象下这个...

    观察者模式的应用:Winform窗体传值

    观察者模式的概念:

    定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并更新。

    今天我们就学着用一下这个观察者模式,先想象下这个场景:当一个窗体(主窗体)内的值发生变化时,另外几个窗体内的值也会发生相应的变化。这个最简单的实现方式是,在子窗体类内创建一个公共方法,在主窗体内创建子窗体的实例。当值发生变化时调用子窗体的公共方法。还有一种简单方法是用静态属性,相当于全局变量,这个只能针对小型应用。第一种有一个缺点,当增加子窗体时,我们需要更改主窗体类的代码。无法实现动态地增加删除对子窗体类中值的更新。这时可以引入观察者模式。
    我们先创建一个winform项目,添加FrmMain,FrmSub1,FrmSub2三个窗体,每个窗体都添加一个textbox文本框,实现当主窗体中的文本框值发生变化时,其他两个子窗体的值也会发生相应的变化。这里我们参考《Head First设计模式》,先设计发布者和订阅者(这里我感觉还是叫比较顺口)。代码如下:

     public interface ISubject
     {
         /// <summary>
         /// 注册订阅者
         /// </summary>
         /// <param name="observer"></param>
         void RegisterObserver(IObserver observer);
    
         /// <summary>
         /// 删除订阅者
         /// </summary>
         /// <param name="observer"></param>
         void RemoveObserver(IObserver observer);
    
         /// <summary>
         /// 通知订阅者
         /// </summary>
         void NotifyObservers();
     }
    
    public interface IObserver
    {
        /// <summary>
        /// 观察者对发布者的响应方法
        /// </summary>
        /// <param name="message"></param>
        void Update(string message);
    }
    

    修改FrmMain类,使其实现ISubject接口,再给文本框增加change事件,代码如下:

    public partial class FrmMain : Form, ISubject
    {
        private string Message { get; set; }
        private List<IObserver> _observers = new List<IObserver>();
    
    
        public FrmMain()
        {
            InitializeComponent();
        }
    
    
        private void FrmMain_Load(object sender, EventArgs e)
        {
            FrmSub1 frmSub1 = new FrmSub1(this);
            FrmSub2 frmSub2 = new FrmSub2(this);
            frmSub1.Show();
            frmSub2.Show();
        }
    
        /// <summary>
        /// 文本框改变事件,调用通知订阅者方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtMain_TextChanged(object sender, EventArgs e)
        {
            this.Message = txtMain.Text;
            NotifyObservers();
        }
    
        /// <summary>
        /// 注册订阅者
        /// </summary>
        /// <param name="observer"></param>
        public void RegisterObserver(IObserver observer)
        {
            _observers.Add(observer);
        }
    
        /// <summary>
        /// 移除订阅者
        /// </summary>
        /// <param name="observer"></param>
        public void RemoveObserver(IObserver observer)
        {
            _observers.Remove(observer);
        }
    
        /// <summary>
        /// 通知订阅者
        /// </summary>
        public void NotifyObservers()
        {
            foreach (IObserver observer in _observers)
            {
                observer.Update(Message);
            }
        }
    }
    

    子窗体类(订阅者)的代码如下:

    public partial class FrmSub1 : Form,IObserver
    {
        public FrmSub1(ISubject subject)
        {
            InitializeComponent();
            //注册
            subject.RegisterObserver(this);
        }
    	//当发布者事件发生时,订阅者需要执行的方法
        public void Update(string message,bool isShown)
        {
           txtSub.Text = message;
        }
    }
    

    上面可以看到FrmMain又依赖了FrmSub1和FrmSub2,其实这是需要另一个方法Show()。不过为表现出高层不依赖底层,我们改掉代码,在NotifyObservers(bool isShown)方法中加入对子窗体是否show的判断,从而实现了避免FrmMain依赖FrmSub1,FrmSub2
    FrmMain类的代码:

    public partial class FrmMain : Form, ISubject
    {
        private string Message { get; set; }
        private List<IObserver> _observers = new List<IObserver>();
    
    
        public FrmMain()
        {
            InitializeComponent();
        }
    
    
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //FrmSub1 frmSub1 = new FrmSub1(this);
            //FrmSub2 frmSub2 = new FrmSub2(this);
            //frmSub1.Show();
            //frmSub2.Show();
            //这里我们使用了方法,摆脱了对子窗体的直接依赖
            NotifyObservers(false);
        }
    
        /// <summary>
        /// 文本框改变事件,调用通知订阅者方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtMain_TextChanged(object sender, EventArgs e)
        {
            this.Message = txtMain.Text;
            NotifyObservers(true);
        }
    
        /// <summary>
        /// 注册订阅者
        /// </summary>
        /// <param name="observer"></param>
        public void RegisterObserver(IObserver observer)
        {
            _observers.Add(observer);
        }
    
        /// <summary>
        /// 移除订阅者
        /// </summary>
        /// <param name="observer"></param>
        public void RemoveObserver(IObserver observer)
        {
            _observers.Remove(observer);
        }
    
        /// <summary>
        /// 通知订阅者
        /// </summary>
        public void NotifyObservers(bool isShown)
        {
    
            foreach (IObserver observer in _observers)
            {
                observer.Update(Message,isShown);
            }
        }
    
    }
    

    子窗体类的代码:

    public partial class FrmSub1 : Form,IObserver
    {
        public FrmSub1(ISubject subject)
        {
            InitializeComponent();
            subject.RegisterObserver(this);
        }
    
        //这里对Update做了改变,isShown为true,表示事件触发时子窗体已经显示
        public void Update(string message,bool isShown)
        {
            if (isShown)
            {
                txtSub.Text = message;
            }
            else
            {
                this.Show();
            }
    
        }
    }
    
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        FrmMain frmMain = new FrmMain();
        FrmSub1 frmSub1 = new FrmSub1(frmMain);
        FrmSub2 frmSub2 = new FrmSub2(frmMain);
        Application.Run(frmMain);
    }
    

    在这里插入图片描述

    完整源代码参考:https://gitee.com/Alexander360/ProDotnetDesignPatternFramework45

    展开全文
  • winform 窗体间互相传值 1. 静态变量法 ValueHelper 2. 直接跨窗体调用 public string tempValue; public TextBox1 .... targetForm tF = new Form(); tF.tempValue = this.txt1.TextValue; tF.show() this.Hide()...
  • WinForm】—窗体之间传值的几种方式

    万次阅读 多人点赞 2018-03-25 13:01:45
    前言 &nbsp;&nbsp;&nbsp;&nbsp;小编最近维护一个Winfrom窗体,是项目中...本文中以主窗体为frmMain,子窗体为frmGroup ,两窗体之间传值来做示例。 方式一: 使用公共静态变量传值窗体frmMa...
  • 父窗体内有一个耗时循环,在子窗体内显示该循环的执行次数。 现在使用直接传值窗体会卡死,直到循环结束显示最终值。 请问该怎么做呢
  • C#winform多个窗体之间相互传递数据操作。弹出一个新窗体,选中一个数据并传递到父窗体的某个控件上,可以是TextBox也可以是DataGrideView之间相互传递数据,处理并刷新等。
  • 最近工作室为了应付 比赛 赶了一个排课系统 我负责排课的功能 写了一个星期终于赶出来了 用到了Winform窗体传值。 一开始我是直接将Form1窗体传入Form2窗体的构造函数 前提是 Form2中有From1的类成员Form1 ...
  • winform利用窗体属性实现窗体之间传值,实现窗体之间的交互!
  • 题目为:点击form1窗体上的button 然后弹出一个form2窗体,form2窗体上有一个dataGridView1,然后双击dataGridView1的某一行数据,会把选中的该行数据传递到form1,并自动填充...窗体之间的互相传值form1弹出form2 C...
  • 本文最早发布在百度空间里,但百度空间取消了,...特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 int value1; string value2; public Form2 ( int value1 , string value2 ) {...
  • 点击form2窗体按钮返回结果20赋值给form1窗体文本框 form1代码如下: //计算按钮事件 private void Button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.f += F2_f; //注册事件...
  • WinForm窗体传值实例基于WinForm开发的简单listbox间传值程序,适合初学者。注意事项:开发环境为Visual Studio 2010,使用.net 4.0开发。
  • 事件本身就是观察者模式...针对事件,.Net Framework提供了一个标准模式,主要在winform中比较常见,区别就是不用自定义委托,使用EventHander委托,因此其步骤是: 定义发布者类,并声明事件 在发布者类中定义触发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,754
精华内容 701
关键字:

winform窗体之间传值