关于Show和showdialog问题 本帖最后由 gatx177 于 2011-10-21 15:58:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那就换一种传值方式撒比如静态类传值Public static class test{ public static string value;}form1:string str=textbox1.Text.Trim();test.value=str;form2:string str=test.value;//这就是textbox1的值 哎 你这表达 能力 ~ 你得 意思 是 在 FORM1 中 打开 Form2 然后 关闭 Form2 的时候 把值传回 FORM1 么? //这种问题多到不怎么想回答了,别处拔来的代码,你看懂了,就一定会做了.public partial class Form2 : Form { public Form2() { InitializeComponent(); } // private void btnXuanZe_Click(object sender, EventArgs e) { Form3 f3 = new Form3(); f3.addEvent += new Form3.AddName(DisplayName); f3.Show(); } private void DisplayName(StringBuilder strName) { string[] name = strName.ToString().Split(';'); for (int i = 0; i < name.Length - 1; i++) { txtName.AppendText(string.Format("您选择了:{0}..\r\n", name[i])); } } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } }public partial class Form3 : Form { public Form3() { InitializeComponent(); } TreeNode tt; public delegate void AddName(StringBuilder nameStr); public event AddName addEvent; private void Form3_Load(object sender, EventArgs e) { tt = new TreeNode(); TreeNode[] tt1 = new TreeNode[20]; for (int j = 0; j < tt1.Length; j++) { TreeNode t = new TreeNode(); t.Text = string.Format("机器人{0}号", j + 1); tt1[j] = t; } tt = new System.Windows.Forms.TreeNode("姓名选择", tt1); tt.ForeColor = System.Drawing.Color.Red; this.tv.Nodes.Add(tt); this.tv.Nodes[0].Expand(); } private void btnAdd_Click(object sender, EventArgs e) { StringBuilder vld = new StringBuilder(); if (tt.Checked) { for (int i = 0; i < tt.Nodes.Count; i++) { vld.Append(tt.Nodes[i].Text + ";"); } } else { for (int i = 0; i < tt.Nodes.Count; i++) { if (tt.Nodes[i].Checked) { vld.Append(tt.Nodes[i].Text + ";"); } } } add(vld); this.Dispose(); return; } private void add(StringBuilder name) { if (addEvent != null) { addEvent(name); } } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } } 如果是这样 有好多种方法1. 静态字段 (2楼那种方法)2. 写一个方法 把FORM1 作为 参数 传入 在 FORM2 中 直接 改 FORM1 的属性 就行了 (这样 你得确保是一个对象 可以用单立模式)3. 委托事件4.公共类 这个方法不是没试过但是不行 例如当前点击按钮弹出窗口从窗口内获得想要的值 回传到主窗口 点击后无值点击第二次返回的是第一次的值 关键是用show 方法后当前点击事件结束了代码如下 private void button2_Click(object sender, EventArgs e) { //DataRow dr = frmSelectItem.drReturn; frmContiner frmcontiner = new frmContiner(); frmSelectItem f = new frmSelectItem(); f.strSql = "select Target_ID,Target_Desc from dbo_Target"; f.strColumn = ",目标人群"; f.strVisable = "0,1"; f.ShowDialog(this);//或者用f.show();打开新窗体获取数据 SplitContainer split = (SplitContainer)Parent.Parent;//将窗体放到SplitContainer split.Panel2.Controls.Clear(); f.TopLevel = false; split.Panel2.Controls.Add(f); //f.Show(); DataRow dr = f.drReturn;//从窗体中获取点击所选的值 if (dr!= null) { this.txtTargetAudience.Tag = dr["Target_ID"].ToString(); this.txtTargetAudience.Text = dr["Target_Desc"].ToString(); } this.Refresh(); dr = null; } ShowDialog() 是显示模式对话框的方法, Show() 就是单纯地显示窗体. 想窗口之间传值或者句柄就给窗体添加属性. 把子窗体要回传的值放到公共属性中,在你的子窗体关闭事件中,把sender取出来,转成对应的类型,然后读取子窗体的这个属性,应该就行了。 一个模态框,一个非模态框,焦点的问题,可以google一下 求正则表达式 c# 连接数据库出错 异步回调如何中断 大侠,乱码了..怎么解决 请问哪位有关于c#矢量图开发的资料? IE9突然碰到的(修改了图片源...) c#里没有幂运算符? 两个子窗体之间如何更改对方的变量的值? 如何用visual studio.net使用.net框架1.1编程? 在C#中有没有类似javascript中的函数eval?如果没有,类似的方法是什么? 求一个c#动态数组的写法,急用 要怎么才能触发datagridview的OnCellPainting事件
比如静态类传值Public static class test
{
public static string value;
}
form1:
string str=textbox1.Text.Trim();
test.value=str;
form2:
string str=test.value;//这就是textbox1的值
在 FORM1 中 打开 Form2 然后 关闭 Form2 的时候 把值传回 FORM1 么?
//这种问题多到不怎么想回答了,别处拔来的代码,你看懂了,就一定会做了.
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} //
private void btnXuanZe_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.addEvent += new Form3.AddName(DisplayName);
f3.Show();
} private void DisplayName(StringBuilder strName)
{
string[] name = strName.ToString().Split(';');
for (int i = 0; i < name.Length - 1; i++)
{
txtName.AppendText(string.Format("您选择了:{0}..\r\n", name[i]));
}
} private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
} TreeNode tt;
public delegate void AddName(StringBuilder nameStr);
public event AddName addEvent; private void Form3_Load(object sender, EventArgs e)
{
tt = new TreeNode();
TreeNode[] tt1 = new TreeNode[20];
for (int j = 0; j < tt1.Length; j++)
{
TreeNode t = new TreeNode();
t.Text = string.Format("机器人{0}号", j + 1);
tt1[j] = t;
}
tt = new System.Windows.Forms.TreeNode("姓名选择", tt1);
tt.ForeColor = System.Drawing.Color.Red; this.tv.Nodes.Add(tt);
this.tv.Nodes[0].Expand();
} private void btnAdd_Click(object sender, EventArgs e)
{
StringBuilder vld = new StringBuilder();
if (tt.Checked)
{ for (int i = 0; i < tt.Nodes.Count; i++)
{
vld.Append(tt.Nodes[i].Text + ";");
}
}
else
{
for (int i = 0; i < tt.Nodes.Count; i++)
{
if (tt.Nodes[i].Checked)
{
vld.Append(tt.Nodes[i].Text + ";");
}
}
}
add(vld);
this.Dispose();
return;
} private void add(StringBuilder name)
{
if (addEvent != null)
{
addEvent(name);
}
} private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
2. 写一个方法 把FORM1 作为 参数 传入 在 FORM2 中 直接 改 FORM1 的属性 就行了 (这样 你得确保是一个对象 可以用单立模式)
3. 委托事件
4.公共类
代码如下
private void button2_Click(object sender, EventArgs e)
{
//DataRow dr = frmSelectItem.drReturn;
frmContiner frmcontiner = new frmContiner();
frmSelectItem f = new frmSelectItem(); f.strSql = "select Target_ID,Target_Desc from dbo_Target";
f.strColumn = ",目标人群";
f.strVisable = "0,1";
f.ShowDialog(this);//或者用f.show();打开新窗体获取数据 SplitContainer split = (SplitContainer)Parent.Parent;//将窗体放到SplitContainer
split.Panel2.Controls.Clear();
f.TopLevel = false; split.Panel2.Controls.Add(f); //f.Show(); DataRow dr = f.drReturn;//从窗体中获取点击所选的值
if (dr!= null)
{
this.txtTargetAudience.Tag = dr["Target_ID"].ToString();
this.txtTargetAudience.Text = dr["Target_Desc"].ToString();
}
this.Refresh();
dr = null;
}
焦点的问题,可以google一下