如何在静态方法中引用非静态方法中的textbox的值?

时间:2020-12-10 19:30:01
相关代码如下,麻烦大大帮看下,谢谢了:

public class newwindowspage  //这是页面所在的类定义开头
{
  public void dymethod()//这是一个非静态方法
  {
    MessageBox.Show(textbox1.text.toString());  //这个非静态方法中引用了本页的一个文本框的值
  }

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法
  {
   newwindowspage onbuttonclicklist = new newwindowspage();  //定义本页的类的实例
   onbuttonclicklist.dymethod()  //引用本页中的一个非静态方法
   //问题如下:这样引用一个非静态方法后,无法取出用户在那个非静态方法的textbox中输入的值
  }

}

14 个解决方案

#1


static newwindowspage  instance;你先得到UI的引用

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
    instance.dymethod()  //引用本页中的一个非静态方法 
  
  } 

#2


public static void staticMethod(newwindowspage onbuttonclicklist)  //这是一个静态方法,里面引用到了上面的一个非静态方法
  {

  onbuttonclicklist.dymethod()  //引用本页中的一个非静态方法
  //问题如下:这样引用一个非静态方法后,无法取出用户在那个非静态方法的textbox中输入的值
  } 

#3


引用 1 楼 fuadam 的回复:
static newwindowspage  instance;你先得到UI的引用 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
    instance.dymethod()  //引用本页中的一个非静态方法 
  
  } 


谢谢,那static newwindowspage  instance; 这句是加到上述代码的哪处来声明呢?
我这样改后,好象认不出dymethod方法,是哪里出错了呢?
public class newwindowspage  //这是页面所在的类定义开头 

   static newwindowspage  instance;  //这里加入声明

  public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());  //这个非静态方法中引用了本页的一个文本框的值 
  } 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
  newwindowspage onbuttonclicklist = new newwindowspage();  //定义本页的类的实例 
   onbuttonclicklist.dymethod() //这里并没有认到有dymethod方法} 

#4


谢谢楼上,

但楼上的两种方法好象还是只能实现从一个静态方法中引用一个非静态方法。但不能引用那个非静态方法中的textbox的值。

那个非静态的textbox好象在被实例后就变为空了,不管后面怎么在textbox中输入,引用后的那个非静态textbox的值都为空?

#5


有高手知道吗?急。。。。

#6


  newwindowspage onbuttonclicklist = new newwindowspage();  //定义本页的类的实例 
  onbuttonclicklist.dymethod()  //引用本页中的一个非静态方法 
==
你这个onbuttonclicklist和当前页面一点关系都没有

#7


静态方法里不能访问实例字段,这是面向对象的常识

#8


引用 7 楼 amandag 的回复:
静态方法里不能访问实例字段,这是面向对象的常识 

多谢指点,那有没有办法在静态方法中不通过实例化的方法来实现引用非静态方法中的字段呢?

#9


在静态方法里,不能访问实例属性或方法,你可以写一个属性保存一个实例,但这种做法只在单例模式时才有意义,对于允许多个实例的类,这样做没什么意义。你也可以给静态方法一个参数,传递一个实例,你在静态方法里就可以访问这个实例的属性或者方法。

#10


你在静态方法里再new一个实例,这个实例跟你要访问的那个实例是两个不同的东西

#11


哈哈,研究出来了。。
我把定义textbox1控件的语句改为了public static System.Windows.Forms.TextBox textbox1;
然后静态方法引用静态变量就可以了 ~~~

不过有一点很奇怪,在引用静态的textbox1内容前,如果来一句定义本页实例的语的话,那么该景泰textbox1的值就会被清空。
所以只能在定义本页实例的语句前面来一句,string textboxtext 先把值存起来。。有点麻烦

#12


你可以把类当成参数传进去就可以了。如下:
public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());
  } 

  public static void staticMethod(newwindowspage nw) 
  { 
    nw.dymethod();
  } 

#13


引用楼主 pgdoryoku 的帖子:
相关代码如下,麻烦大大帮看下,谢谢了: 

public class newwindowspage  //这是页面所在的类定义开头 

  public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());  //这个非静态方法中引用了本页的一个文本框的值 
  } 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
  newwindowspage onbuttonclicklist = ne…


可以定义一个静态的TextBox: ActivityRef,将那个非静态的textBox赋给它,然后就可以调用静态的textbox1

public static System.Windows.Forms.TextBox ActivityRef;//定义签名

frmServer.ActivityRef = this.textbox1;//初始化

之后就可以直接调用ActivityRef,相当于调用textbox1了。

#14


不可以访问的.

   写个封装类封装数据吧. 在静态方法里调用属性.

#1


static newwindowspage  instance;你先得到UI的引用

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
    instance.dymethod()  //引用本页中的一个非静态方法 
  
  } 

#2


public static void staticMethod(newwindowspage onbuttonclicklist)  //这是一个静态方法,里面引用到了上面的一个非静态方法
  {

  onbuttonclicklist.dymethod()  //引用本页中的一个非静态方法
  //问题如下:这样引用一个非静态方法后,无法取出用户在那个非静态方法的textbox中输入的值
  } 

#3


引用 1 楼 fuadam 的回复:
static newwindowspage  instance;你先得到UI的引用 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
    instance.dymethod()  //引用本页中的一个非静态方法 
  
  } 


谢谢,那static newwindowspage  instance; 这句是加到上述代码的哪处来声明呢?
我这样改后,好象认不出dymethod方法,是哪里出错了呢?
public class newwindowspage  //这是页面所在的类定义开头 

   static newwindowspage  instance;  //这里加入声明

  public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());  //这个非静态方法中引用了本页的一个文本框的值 
  } 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
  newwindowspage onbuttonclicklist = new newwindowspage();  //定义本页的类的实例 
   onbuttonclicklist.dymethod() //这里并没有认到有dymethod方法} 

#4


谢谢楼上,

但楼上的两种方法好象还是只能实现从一个静态方法中引用一个非静态方法。但不能引用那个非静态方法中的textbox的值。

那个非静态的textbox好象在被实例后就变为空了,不管后面怎么在textbox中输入,引用后的那个非静态textbox的值都为空?

#5


有高手知道吗?急。。。。

#6


  newwindowspage onbuttonclicklist = new newwindowspage();  //定义本页的类的实例 
  onbuttonclicklist.dymethod()  //引用本页中的一个非静态方法 
==
你这个onbuttonclicklist和当前页面一点关系都没有

#7


静态方法里不能访问实例字段,这是面向对象的常识

#8


引用 7 楼 amandag 的回复:
静态方法里不能访问实例字段,这是面向对象的常识 

多谢指点,那有没有办法在静态方法中不通过实例化的方法来实现引用非静态方法中的字段呢?

#9


在静态方法里,不能访问实例属性或方法,你可以写一个属性保存一个实例,但这种做法只在单例模式时才有意义,对于允许多个实例的类,这样做没什么意义。你也可以给静态方法一个参数,传递一个实例,你在静态方法里就可以访问这个实例的属性或者方法。

#10


你在静态方法里再new一个实例,这个实例跟你要访问的那个实例是两个不同的东西

#11


哈哈,研究出来了。。
我把定义textbox1控件的语句改为了public static System.Windows.Forms.TextBox textbox1;
然后静态方法引用静态变量就可以了 ~~~

不过有一点很奇怪,在引用静态的textbox1内容前,如果来一句定义本页实例的语的话,那么该景泰textbox1的值就会被清空。
所以只能在定义本页实例的语句前面来一句,string textboxtext 先把值存起来。。有点麻烦

#12


你可以把类当成参数传进去就可以了。如下:
public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());
  } 

  public static void staticMethod(newwindowspage nw) 
  { 
    nw.dymethod();
  } 

#13


引用楼主 pgdoryoku 的帖子:
相关代码如下,麻烦大大帮看下,谢谢了: 

public class newwindowspage  //这是页面所在的类定义开头 

  public void dymethod()//这是一个非静态方法 
  { 
    MessageBox.Show(textbox1.text.toString());  //这个非静态方法中引用了本页的一个文本框的值 
  } 

  public static void staticMethod()  //这是一个静态方法,里面引用到了上面的一个非静态方法 
  { 
  newwindowspage onbuttonclicklist = ne…


可以定义一个静态的TextBox: ActivityRef,将那个非静态的textBox赋给它,然后就可以调用静态的textbox1

public static System.Windows.Forms.TextBox ActivityRef;//定义签名

frmServer.ActivityRef = this.textbox1;//初始化

之后就可以直接调用ActivityRef,相当于调用textbox1了。

#14


不可以访问的.

   写个封装类封装数据吧. 在静态方法里调用属性.