在线等候,非静态的字段、方法、属性要求对象

yuanyingtanxi 2003-12-11 09:57:07
C# WindowsForm程序
public class MainForm:.......
{
...
...
public void runprog
{
Dosomething runa =new DoSomethis;
runa.sendMess();

}
public static void DispMess(string msg);
{
listView2.Items.Add(msg); /////这里告诉我非静态的字段、方法或属性“Demo.MainForm.listView2”要求对象引用
}
}

public class Dosomething
{
public Dosomething()
{
}
public void sendMess()
{
MainForm.DispMess("this is a test");
}
}

这段程序的意思是我要在mainform的listview里面显示下面发送的信息
如何作呢?
...全文
2042 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanyingtanxi 2003-12-15
  • 打赏
  • 举报
回复
小胖请来接分.
http://expert.csdn.net/Expert/topic/2563/2563931.xml?temp=.9270136
saucer 2003-12-15
  • 打赏
  • 举报
回复
here is a simple solution:

1. remove static from
public static void DispMess(string msg)

2. add a static variable to your form, for example


using System;
using System.Windows.Forms;
using System.Drawing;

public class MyForm: Form
{
String ms = "";
public static MyForm smf;
Button btn = new Button();
public MyForm()
{
btn.Location = new Point(100,100);
btn.Click += new EventHandler(runprog);
btn.Text = "Click me";
Controls.Add(btn);
}
public void runprog(Object o, EventArgs e)
{
Dosomething runa =new Dosomething();
runa.sendMess();

}
public void DispMess(string msg)
{
ms = msg;
MessageBox.Show(ms);
}

[STAThread]
public static void Main()
{
smf = new MyForm();
Application.Run(smf);
}
}

public class Dosomething
{
public Dosomething()
{
}
public void sendMess()
{
MyForm.smf.DispMess("this is a test");
}
}
tashanzhishi 2003-12-15
  • 打赏
  • 举报
回复
public class MainFrm : System.Windows.Forms.Form
{
public static string strMessage ;//静态变量,存储要显示的消息
public const int SHOWMESSAGE = 0x0478 ;//自定义消息
public static int MainFormHandle = 0 ;//静态变量,存储主窗体句柄
///以上是需要定义的变量

public MainFrm()//构造函数
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
MainFormHandle = this.Handle.ToInt32() ;//记录主窗体句柄
}

protected override void DefWndProc( ref System.Windows.Forms.Message m )
{
switch(m.Msg)
{
case SHOWMESSAGE:
uf_ShowMessage() ; //响应自定义消息,调用函数显示strMessage 的内容   break;
default:
  base.DefWndProc(ref m);///调用基类函数处理非自定义消息。
  break;
}
}


public void uf_ShowMessage()
{
在这里处理静态变量strMessage
}

}



在你的MyFtp类里加上如下代码:
public class MyFtp
{
public const int SHOWMESSAGE= 0x0478 ;

[DllImport("User32.dll",EntryPoint="SendMessage")]
    private static extern int SendMessage(
          int hWnd,// handle to destination window
          int Msg, // message
          int wParam,// first message parameter
          int lParam // second message parameter
    );

}

在Myftp中需要发送消息的地方加上如下代码:

MainFrm.strMessage = "要显示的内容" ;
SendMessage(MainFrm.MainFormHandle,SHOWMESSAGE,0,0) ;

yuanyingtanxi 2003-12-15
  • 打赏
  • 举报
回复
to 小胖
我在下面的类里面没办法调用主窗口呀。
最好能给出例子,这是我的第一个C#程序,我刚学
tashanzhishi 2003-12-15
  • 打赏
  • 举报
回复
你可以在主窗体类里面定义一个静态变量,当你向主窗体发送消息时,顺便给这个静态变量赋值(也可以通过定义一个静态方法简介给这个变量赋值),通过静态变量来传递字符串。
然后在主窗体类里面定义一个方法(不是静态的),该方法响应消息,把静态字符串显示在主窗体上
yuanyingtanxi 2003-12-15
  • 打赏
  • 举报
回复
没人理我
:(
yuanyingtanxi 2003-12-15
  • 打赏
  • 举报
回复
tashanzhishi 2003-12-12
  • 打赏
  • 举报
回复
俺刚解决了一个类似问题,是通过消息解决的,方法如下:
http://www.bizunit.com/qdbbs/Announce/announce.asp?BoardID=106&ID=1071&Upflag=1&Num=1
hunyuan 2003-12-12
  • 打赏
  • 举报
回复
关注你这个问题,帮你顶
yuanyingtanxi 2003-12-12
  • 打赏
  • 举报
回复
TO tashanzhishi(小胖)
你的方法很好,可从那个类里面传我要传过来字符串没办法处理呀。
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
各位,总得给我想一个解决方案呀
hunyuan 2003-12-11
  • 打赏
  • 举报
回复
先学会忘记吧:)等所有的Delphi招式都忘掉就好了:)
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
listview在MainForm里面是私有的,要在第二个类里面调用不行呀
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
第二个类里面调主窗口里的listview也告诉我要求对象引用
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
TO acewang
你的listView1是什么呀,是Form里的listView么
我要在
acewang 2003-12-11
  • 打赏
  • 举报
回复
不好意思,不常在C#版,一时看不见
public static void addItem(ListView LV,string msg)
{
LV.Items.Add(new ListViewItem(msg));
}
...
Form1.addItem(listView1,"abc");
LA003 2003-12-11
  • 打赏
  • 举报
回复
public static void DispMess(string msg);
{
ListViewItem item1 = new ListViewItem(msg,0);
listView2.Items.Add(item1);
}

这样也许可以的 ,
还不行要不把code 贴出来帮你调
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
刚才我把listview2也给声名成static了,结果出了一大堆错误
yuanyingtanxi 2003-12-11
  • 打赏
  • 举报
回复
To acewang
请哥哥详细说明,这是小弟第一个C#程序,嘛都不懂
acewang 2003-12-11
  • 打赏
  • 举报
回复
将你的ListView的ID作为参数传进去
加载更多回复(12)

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧