向方法中传递参数分为 值传递 和 引用传递 ,值传递顾名思义只传给方法值,引用传递就是传了地址,保留对参数值的修改(用ref修饰参数)我这两天实现了窗体间的数据传递(一个是子窗体文本框鼠标坐标传给父窗体标题栏,一个是模拟IM软件,在头像选择窗体回传选择头像给主窗体)但是两种方法都没有用到ref修饰参数,代码里面也没有体现出对传入参数的修改(比如PictureBox m frmParent theMouse),自己做完实现了都很糊涂,很奇怪为什么保留了对值的修改,怎么会是引用传递了呢?
我传递参数的理解没到家,请大家指正!求求大家能有耐心看我的代码了
子窗体传鼠标坐标给父窗体:
---------------------------------------------父窗体代码: public frmParent()
{
InitializeComponent();
}
//点击按钮弹出子窗体,给进参数为本窗体
private void button1_Click(object sender, EventArgs e)
{
frmChild ShowForm1 = new frmChild(this);
ShowForm1.MdiParent = this;
ShowForm1.Show();
}
子窗体代码: frmParent cc; //声明父窗体对象 //StatusStrip cc;
public frmChild(frmParent theMouse)
{
InitializeComponent(); cc=theMouse; //给父窗体对象赋值
} //捕获子窗体文本框鼠标,并在父窗体标题栏显示
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
string get = string.Format("捕捉到鼠标({0},{1})", e.X, e.Y);
//cc.Items.Clear();
//cc.Items.Add(get);
cc.Text = get;
}传递选择的头像给主窗体:
-------------------------------------------------------------主窗体代码: public partial class frmQQMainForm : Form
{
int index=0; //头像索引值 public frmQQMainForm()
{
InitializeComponent();
}
//窗体开始时初始化头像
private void Form1_Load(object sender, EventArgs e)
{
picHead.Image = ilImages.Images[index];
} //当点击QQ主窗体头像时,弹出选择头像窗体
private void picHead_Click(object sender, EventArgs e)
{
frmSelectHead showSelectForm = new frmSelectHead(index,picHead);
showSelectForm.Show();
}
}
选择头像窗体代码: int number; //现在头像的索引
PictureBox changeHead; //声明图片控件对象 //构造方法初始化现在的头像,
//QQ主窗体index参数传递给选择头像窗体,
//初始化头像的索引
public frmSelectHead(int n,PictureBox m)
{
InitializeComponent(); number = n;
changeHead = m;
} //加载窗体时显示现在主窗体的头像
private void frmSelectHead_Load(object sender, EventArgs e)
{
picCorrentHead.Image = ilQQHeadList.Images[number]; pic_1.Image = ilQQHeadList.Images[0];
pic_1.Tag = 0; pic_2.Image = ilQQHeadList.Images[1];
pic_2.Tag = 1; pic_3.Image = ilQQHeadList.Images[2];
pic_3.Tag = 2; pic_4.Image = ilQQHeadList.Images[3];
pic_4.Tag = 3; pic_5.Image = ilQQHeadList.Images[4];
pic_5.Tag = 4; } /*点击图片显示相应头像*/
private void pic_Choice_Click(object sender, EventArgs e)
{
//得到选择头像的索引
int ChangeIndex = Convert.ToInt32(((PictureBox)sender).Tag); //显示选择了的头像
picCorrentHead.Image = ilQQHeadList.Images[ChangeIndex]; //换主窗体的头像
changeHead.Image = ilQQHeadList.Images[ChangeIndex]; //picCorrentHead.Image.Tag=((PictureBox)sender).Tag;
}
我传递参数的理解没到家,请大家指正!求求大家能有耐心看我的代码了
子窗体传鼠标坐标给父窗体:
---------------------------------------------父窗体代码: public frmParent()
{
InitializeComponent();
}
//点击按钮弹出子窗体,给进参数为本窗体
private void button1_Click(object sender, EventArgs e)
{
frmChild ShowForm1 = new frmChild(this);
ShowForm1.MdiParent = this;
ShowForm1.Show();
}
子窗体代码: frmParent cc; //声明父窗体对象 //StatusStrip cc;
public frmChild(frmParent theMouse)
{
InitializeComponent(); cc=theMouse; //给父窗体对象赋值
} //捕获子窗体文本框鼠标,并在父窗体标题栏显示
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
string get = string.Format("捕捉到鼠标({0},{1})", e.X, e.Y);
//cc.Items.Clear();
//cc.Items.Add(get);
cc.Text = get;
}传递选择的头像给主窗体:
-------------------------------------------------------------主窗体代码: public partial class frmQQMainForm : Form
{
int index=0; //头像索引值 public frmQQMainForm()
{
InitializeComponent();
}
//窗体开始时初始化头像
private void Form1_Load(object sender, EventArgs e)
{
picHead.Image = ilImages.Images[index];
} //当点击QQ主窗体头像时,弹出选择头像窗体
private void picHead_Click(object sender, EventArgs e)
{
frmSelectHead showSelectForm = new frmSelectHead(index,picHead);
showSelectForm.Show();
}
}
选择头像窗体代码: int number; //现在头像的索引
PictureBox changeHead; //声明图片控件对象 //构造方法初始化现在的头像,
//QQ主窗体index参数传递给选择头像窗体,
//初始化头像的索引
public frmSelectHead(int n,PictureBox m)
{
InitializeComponent(); number = n;
changeHead = m;
} //加载窗体时显示现在主窗体的头像
private void frmSelectHead_Load(object sender, EventArgs e)
{
picCorrentHead.Image = ilQQHeadList.Images[number]; pic_1.Image = ilQQHeadList.Images[0];
pic_1.Tag = 0; pic_2.Image = ilQQHeadList.Images[1];
pic_2.Tag = 1; pic_3.Image = ilQQHeadList.Images[2];
pic_3.Tag = 2; pic_4.Image = ilQQHeadList.Images[3];
pic_4.Tag = 3; pic_5.Image = ilQQHeadList.Images[4];
pic_5.Tag = 4; } /*点击图片显示相应头像*/
private void pic_Choice_Click(object sender, EventArgs e)
{
//得到选择头像的索引
int ChangeIndex = Convert.ToInt32(((PictureBox)sender).Tag); //显示选择了的头像
picCorrentHead.Image = ilQQHeadList.Images[ChangeIndex]; //换主窗体的头像
changeHead.Image = ilQQHeadList.Images[ChangeIndex]; //picCorrentHead.Image.Tag=((PictureBox)sender).Tag;
}
解决方案 »
- C#连接MYSQL问题,帮忙看一下。
- 咋样看自己这小破程序连上数据库了没?
- windowsForms柱状图
- 请问如何使datagridview某一单元格获得焦点并处于编辑状态?
- DataGridView自定义列怎么加自定义属性
- 送分快来抢:我自己编写了一个web自定义控件,如何为他添加类似button的onclick事件 ?
- 100分求:如何检查远程文件是否存在?
- 在某个dataset中,有employee等多个表,怎么有dataset.employeeDataTable dt这种访问方式?
- 有没有办法动态生成一个变量?
- Visual SourceSafe如何回滚工厂到修改之前的状态
- winform线程问题
- 帮忙解释一个正则
可以这样 void Test(out int x){x=100;}这样修改的x就会传出来的,否则不会。
C#的所有值类型均隐式派生自System.ValueType:
结构体:struct(直接派生于System.ValueType); 数值类型: 整 型:sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);
浮点型:float(System.Single),double(System.Double);
用于财务计算的高精度decimal型:decimal(System.Decimal)。
bool型:bool(System.Boolean的别名);
用户定义的结构体(派生于System.ValueType)。
枚举:enum(派生于System.Enum);
可空类型(派生于System.Nullable<T>泛型结构体,T?实际上是System.Nullable<T>的别名)。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。