关闭Tab Control

时间:2018-08-11 21:35:36

标签: c# winforms

对于创建的每个选项卡,将打开一个应用程序。我可以关闭标签页本身,但是当我检查任务管理器时,应用程序仍在运行。

tabs

关闭某个标签时,如何确定要关闭哪个应用程序?

例如,有3个标签,当我关闭标签2时,它只会杀死在标签2上运行的应用程序。

我可以在胜利结束时杀死所有玩家:

Process[] localByName = Process.GetProcessesByName("notepad"); 
foreach (Process p in localByName)              
       p.Kill();

2 个答案:

答案 0 :(得分:1)

在选项卡页的Tag属性中存储对启动过程的引用:

TabPage tabpage = new TabPage();
tabControl1.TabPages.Add(tabpage);
tabpage.Tag = Process.Start("notepad");

现在,当您关闭标签页时,需要获取要关闭的标签页的引用,将Tag强制转换为Process并调用Kill()

Process processtoremove = (Process)tabpagebeingremoved.Tag;
processtoremove.Kill();

答案 1 :(得分:0)

我创建了一个类来运行和存储进程的tabName和PID

public class myProcess
{
  private static Hashtable _sessions;

  public static Hashtable sessions
  {
     get { return _sessions; }
     set { _sessions = value; }
  }

  public static void run(string name, string _Process) 
  {
     Process p = Process.Start(name, _Process);
     sessions.Add(name, p.Id);
     p.WaitForInputIdle();
  }
}

在加载表单时:

myProcess.sessions = new Hashtable();

创建标签时:

ctr++;
String name = box + ctr;

TabPage tp = new TabPage(name);

Panel tb = new Panel();
tb.Dock = DockStyle.Fill;
tp.Controls.Add(tb);
myTab.TabPages.Add(tp);
myTab.SelectedTab = tp;
tp.Name = name;

myProcess.run(name, "Notepad")

然后在关闭标签页后,获取tabName并终止进程

String tabName = myTab.SelectedTab.Name;                   

int PID = Int32.Parse(myProcess.sessions[tabName].ToString() );
Process sTab = Process.GetProcessById(PID);
sTab.Kill();