C#入门级的问题:多个窗体之间怎么交互??? ( 积分: 50 )

  • 主题发起人 主题发起人 luckysw
  • 开始时间 开始时间
L

luckysw

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现如下一个MIS的登录过程:
先是创建主窗体(MainFrm),然后显示出登录的窗体(LoginFrm),在这里面输入工号和密码.如果登录成功,就将登录人员的工号显示在MainFrm的状态栏上.
请问怎么实现MainFrm状态栏的修改?
谢谢[:)]
 
我想实现如下一个MIS的登录过程:
先是创建主窗体(MainFrm),然后显示出登录的窗体(LoginFrm),在这里面输入工号和密码.如果登录成功,就将登录人员的工号显示在MainFrm的状态栏上.
请问怎么实现MainFrm状态栏的修改?
谢谢[:)]
 
pubilc static 变量传递,
或者构造函数,
 
搞一全程的变量 比如一个UserInfo 类
启动时创建
LoginFrm/MainFrm 里读写
和Delphi一个的
 
我也在学习当中,暂且还不知道与asp,jsp之间的区别
 
1.你可以通过IServiceProvider/ServiceContainer来实现
2.创建一个静态的Collection,每个窗体在Create/Dispose的时候把自己添加/删除.类似于DELPHI中Screen.Forms.
 
窗体之间的值传递!
 
在LOGINFRM中寫下﹕
PRIVATE MainFrm C_mainfrm;
button事件中寫﹕
this.C_mainfrm=new MainFrm();
C_mainfrm.狀態櫚[0].text=this.textbox1.text;
 
写在一个类里。。。用户类,放个NAME属性,主窗体显示的时候加载近来[:D]
 
好好看看属性(property)那一块吧!
 
to lb_icesea79,
UserInfo类怎么操作MainFrm这个类里面的控件啊? 有没有示例代码?
 
能不能在MainFrm类中添加一个静态方法,设置状态栏的值,比如:
public static void SetStatusBar(string s)
{
Form1.StatusBar1.Panels[0].Text = s;
}
一编译就报错:D:/Mydo
cuments/Visual Studio Projects/MIS/MainFrm.cs(152): 非静态的字段、方法或属性“MIS.MainFrm.StatusBar1”要求对象引用
应该怎么改?
谢谢大家
 
我想你肯定看了我上面提到的属性(property)那一块,并且觉得很简单,但是偏偏在这里,用属性(property)是最好的解决方法:
我看你上面是想把MainFrm窗体中的String s 传给Form1.StatusBar1.Panels[0]显示,那么以此为例子做一下:
MainFrm中:
private string s = "":
给值在你响应的程序中给就成!
要传给Form1.StatusBar1.Panels[0],那么要问了,可不可以把Form1.StatusBar1由private变为public ,然后在MainFrm的代码中直接
Form1.StatusBar1.Panels[0].Text = s;
呢?可以 <不过注意你的Form1实例化了吗?>
问题是那样违反了面向对象的封装特性,你可以在外部任意修改Form1.StatusBar1的属性和值,比方说颜色,比方说字体大小,可是你只是要在外部想给他的Text副值,如此做启不小题大做了吗?
那么怎么做呢?
在Form1的类定义里,加入:
private string Panel_Text;
public string PanelText
{
get
{
return StatusBar1.Panels[0].Text;
}
set
{
StatusBar1.Panels[0].Text = value;
}
}
在你的MainFrm方法里,注意不是static 的,建议你去打打基础:
就可以直接:
Form1.PanelText = this.s;
,然后就把值传过去了,而且SET,GET可以要一个,达到可读或者可写的功能,
好处在哪里,自己去体会吧!
 
谢谢,网事如风,
我明白你的意思了.
可是我现在是想在LoginFrm这个类中修改MainFrm这个类中的属性.
我如果加了public string PanelText这个属性,要想在LoginFrm中修改这个属性,还是得要先创建一个MainFrm的实例.这样是不行的,因为new一个实例,就会又生成一个MainFrm.
而我只是想修改原来那个已经生成了的MainFrm实例(先创建的MainFrm实例,再创建的LoginFrm实例).
不知道我说清楚了没
 
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object obj = new Form2();
Form2 form = GlobalData.s_ServiceContainer.GetService(typeof(Form2)) as Form2;
form.Text = "只能适用于单个实例的对象,允许多个实例的可以自定义静态列表实现";
form.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
GlobalData.s_ServiceContainer.AddService(typeof(Form2), this);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
GlobalData.s_ServiceContainer.RemoveService(typeof(Form2));
}
}
public class GlobalData
{
public static readonly System.ComponentModel.Design.ServiceContainer s_ServiceContainer;
static GlobalData()
{
s_ServiceContainer = new System.ComponentModel.Design.ServiceContainer();
}
}
}
 
创建窗体的静态变量,然后给窗体的变量赋值
 

Similar threads

后退
顶部