类之间的传递

jljhwang 2009-01-07 02:59:53
我想每次点击Form1中的 toolStripButton1时在Form2中打开一个WebBrowser
点击toolStripButton2时移出TabPage和WebBrowser。
//Form1:
...
private void toolStripButton1_Click(object sender, EventArgs e)
{
Form2 frm=new Form2();
frm.Show();
frm.ShowWeb(uri);
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
//移出tp和web
frm.RemoveWeb()
}

//Form2:
...
public void ShowWeb(string uri)
{
TabPage tp=new TabPage();
WebBrowser web=new WebBrowser();
web.Navigate(uri);
tp.Controls.Add(web);
tabControls.Controls.Add(tp);
}

public void RemoveWeb()
{
//怎么写才能移出tp和web
//tp.Dispose();
//web.Dispose();
}
我该怎么写,谢谢。
...全文
145 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
兄弟们还有别的办法没,这个问题困绕我好多天了
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangkingwellboy 的回复:]
外边声明一个控件数组每次声明新的控件都放在里面 不用的时候可根据索引删除
当然如果用hastable或者泛型效果会更好 当然删除方法都一样
到底删除哪一个这个我想不难吧
[/Quote]
我明白你的意思了,那个tabControls算不算控件组,然后用tabControls.Controls.Remove(web)删除
,删除了还在点用内存吧,我用dispose()消毁。还有就是我真的不知道哪消毁哪一个。
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lunat 的回复:]
打开一个全新的web?我还以为你要隐藏呢。


C# code
//Form2
//...
TabPage tp;
WebBrowser web;
public void ShowWeb(string uri)
{
if(tp==null)
{
tp = new TabPage();
web = new WebBrowser();
web.Navigate(uri);
tabControls.Controls.Add(tp);
tp.Controls.Add(web);
}
}
public void RemoveWeb()
{
if(tp!=null)
{
web.Dispose();
tp.Dispose();
}
}




看LZ一开始也…
[/Quote]
这个方法我也用过了,只不过要在移出相对应的web,这个方法移出的不一定是想移出的。
这样的确很难看,剩下一个光秃秃的tabControl1,以后再想办法。
wangkingwellboy 2009-01-07
  • 打赏
  • 举报
回复
结合这个
void form1but_Click(object sender, EventArgs e)
{
objFrm.Controls.Remove(but); //but为你要删除的控件
}
wangkingwellboy 2009-01-07
  • 打赏
  • 举报
回复
外边声明一个控件数组每次声明新的控件都放在里面 不用的时候可根据索引删除
当然如果用hastable或者泛型效果会更好 当然删除方法都一样
到底删除哪一个这个我想不难吧
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
//Form1:
...
Form2 frm=new Form2();
private void toolStripButton1_Click(object sender, EventArgs e)
{

frm.Show();
frm.ShowWeb(uri);
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
//移出tp和web
frm.RemoveWeb()
}

//Form2:
...
public void ShowWeb(string uri)
{
ShowWebClass sw=new ShowWebClass();
sw.AddWeb(tabControl);

}

public void RemoveWeb()
{
ShowWebClass.Remove(uri);
}
//ShowWebClass:

...
TabPage tp=new TabPage();
WebBrowser web=new WebBrowser();
public void AddWeb(TabControl tb)
{
web.Navigate(uri);
tp.Controls.Add(web);
pb.Controls.Add(tp);
}
public static Remove(string uri)
{
if(web.Url.ToString()==uri)
{
tp.Dispose()
web.Dispose();
}
}
这样写的话只能等Web加载完成后才能移出,未加载完成会出错。
lunat 2009-01-07
  • 打赏
  • 举报
回复
打开一个全新的web?我还以为你要隐藏呢。


//Form2
//...
TabPage tp;
WebBrowser web;
public void ShowWeb(string uri)
{
if(tp==null)
{
tp = new TabPage();
web = new WebBrowser();
web.Navigate(uri);
tabControls.Controls.Add(tp);
tp.Controls.Add(web);
}
}
public void RemoveWeb()
{
if(tp!=null)
{
web.Dispose();
tp.Dispose();
}
}


看LZ一开始也想到了嘛 ^_^

这样的设计有点问题哦..tp和web移除之后form2不是很难看了么。。还不如直接关了form2呢
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangkingwellboy 的回复:]
那你就外边在套一层控件数组
[/Quote]
能说的具体一点吗?
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangkingwellboy 的回复:]
在form1中声明form2对象 代码创建tab与web 然后
例如(button例子)
Form objFrm = new Form();
Button but;
Button form1but;
public Form1()
{
InitializeComponent();
objFrm = new Form();
but = new Button();
this.form1but.Click += new EventHandler(form1but_Click);
objFrm.Controls.Add(but);
objFrm.Show()…
[/Quote]
这个思路没看明白。
wangkingwellboy 2009-01-07
  • 打赏
  • 举报
回复
那你就外边在套一层控件数组
jljhwang 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lunat 的回复:]
首先 form1里面的Form2 frm = new Form2()应该放在方法外面
form2里面的TabPage tp = new TabPage();WebBrowser web = new WebBrowser();也应该放在方法外面;这么写吧:
//Form2
...
TabPage tp;
WebBrowser web;
public void ShowWeb(string uri)
{
if(tp==null)
{
tp = new TabPage();
web = new WebBrowser();
web.Navigate(uri);
tabControls.Controls.Add(tp);
tp.Controls.Add(web);
}
t…
[/Quote]
Form2 frm = new Form2()是放在外面的。我写错了。
可是TabPage tp = new TabPage();WebBrowser web = new WebBrowser();不能放在外面,因为我要
每次点击都打开一个Web。
wangkingwellboy 2009-01-07
  • 打赏
  • 举报
回复
在form1中声明form2对象 代码创建tab与web 然后
例如(button例子)
Form objFrm = new Form();
Button but;
Button form1but;
public Form1()
{
InitializeComponent();
objFrm = new Form();
but = new Button();
this.form1but.Click += new EventHandler(form1but_Click);
objFrm.Controls.Add(but);
objFrm.Show();
}
void form1but_Click(object sender, EventArgs e)
{
objFrm.Controls.Remove(but);
}
就这么个思路 你根据自己的情况在改改
Good Luck
EveryCase 2009-01-07
  • 打赏
  • 举报
回复
ding
lunat 2009-01-07
  • 打赏
  • 举报
回复
首先 form1里面的Form2 frm = new Form2()应该放在方法外面
form2里面的TabPage tp = new TabPage();WebBrowser web = new WebBrowser();也应该放在方法外面;这么写吧:
//Form2
...
TabPage tp;
WebBrowser web;
public void ShowWeb(string uri)
{
if(tp==null)
{
tp = new TabPage();
web = new WebBrowser();
web.Navigate(uri);
tabControls.Controls.Add(tp);
tp.Controls.Add(web);
}
tp.Visible = true;
//web.Visible = true;
}
public void RemoveWeb()
{
if(tp!=null)tp.Visible = false;
}

111,130

社区成员

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

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

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