Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

auf welchen tab im TabControl wurde geklickt?

38 views
Skip to first unread message

Marcus Wagner

unread,
Jul 25, 2009, 11:21:56 AM7/25/09
to
Hallo erstmal,


ich habe hier ein kleines Problem, das sich so fᅵr mich nicht lᅵsen lᅵsst.

Ich habe ein TabControl mit verschiedenen TabPages. Nun mᅵchte ich mit
der mittleren Maustaste verschiedene Aktionen auslᅵsen, und zwar je
nachdem, auf welchen Tab des TabControls geclickt wurde.

Die Abfrage der TabPage nach Selected, Visible oder Focused funktioniert
leider nicht, und ich habe auch nichts anderes gefunden, was mir
weiterhelfen kᅵnnte.


Ich hoffe, jemand von euch weiss Rat

LG
Marcus

Marcus Wagner

unread,
Jul 25, 2009, 2:34:05 PM7/25/09
to
Marcus Wagner schrieb:

Also, ich hab noch ein bisschen weitergefrickelt und habe auch etwas
erreicht:

Erstens eine meines Erachtens eigentlich elegante Methode, die aber
nicht funktioniert :/

Ich habe mir die Funktion GetChildAtPoint etwas genauer angeguckt. Das
Problem ist erstens, dass Mouseeventargs e.Location die relative
Mausposition auf dem TabControl ist, es muss also noch die Position des
TabControls addiert werden, dann liefert die Funktion aber leider nur
das TabControl selbst und keine TabPage. Ich bin also kein Stᅵck
weitergekommen :/


Zweitens: unelegant, aber funktioniert:
Ich dividiere Mouseeventargs e.X durch TabControl tc.ItemSize.Width und
erhalte damit eine Integerzahl, die dem Index des Tabs entspricht. Das
Problem hierbei ist jedoch, dass die Grᅵsse Tabs normalerweise dem Text,
der in den Tabs steht angepasst wird. Die Itemsize ᅵndert sich aber
nicht! Somit kann man also den falschen Index erwischen oder sogar eine
Zahl ausserhalb der Anzahl der TabPages. Die Lᅵsung hierfᅵr ist, dass
man den SizeMode des TabControls auf Fixed setzt. Teilt man nun e.X
durch tc.ItemSize.Width so erhᅵlt man natᅵrlich den richtigen Index aber
die TabPages passen sich dem Inhalt nicht mehr an.


Falls jemand eine bessere Lᅵsung weiss, ich bin fᅵr alles offen ;)


LG
Marcus

Frank Dzaebel

unread,
Jul 25, 2009, 5:07:44 PM7/25/09
to
Hallo Marcus,

> [...] Ich habe ein TabControl mit verschiedenen TabPages. Nun mᅵchte ich

> mit der mittleren Maustaste verschiedene Aktionen auslᅵsen, und zwar je
> nachdem, auf welchen Tab des TabControls geclickt wurde.

Auf die Schnelle als grober Ansatz:

private void Form1_Load(object sender, EventArgs e)
{
tabControl1.MouseDown += new
MouseEventHandler(tabControl1_MouseDown);
}

void tabControl1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Middle)
{
TabPage tp = GetTabPageFromPoint(e.Location);
}
}

private TabPage GetTabPageFromPoint(Point pt)
{
TabPage tp = null;
for (int i = 0; i < tabControl1.TabPages.Count; i++)
if (tabControl1.GetTabRect(i).Contains(pt))
{
tp = tabControl1.TabPages[i]; break;
}
return tp;
}
_____


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Marcus Wagner

unread,
Jul 25, 2009, 6:55:08 PM7/25/09
to
Frank Dzaebel schrieb:

> Hallo Marcus,
>
>> [...] Ich habe ein TabControl mit verschiedenen TabPages. Nun mᅵchte
>> ich mit der mittleren Maustaste verschiedene Aktionen auslᅵsen, und
>> zwar je nachdem, auf welchen Tab des TabControls geclickt wurde.

> private TabPage GetTabPageFromPoint(Point pt)
> {
> TabPage tp = null;
> for (int i = 0; i < tabControl1.TabPages.Count; i++)
> if (tabControl1.GetTabRect(i).Contains(pt))
> {
> tp = tabControl1.TabPages[i]; break;
> }
> return tp;
> }
> _____
>
>
> ciao Frank

As everytimes, works like a charm ;)

Vielen Dank, Frank

Gruss
Marcus

Martin Horst

unread,
Jul 27, 2009, 2:36:47 AM7/27/09
to
Hi,

ich glaube du suchst SelectedTab:

Marcus Wagner schrieb:
> Hallo erstmal,
>

> ...

private void tabControlFoo_SelectedIndexChanged(object sender,
EventArgs e)
{
if ( tabControlFoo.SelectedTab == tabPageBar )
{
// do something
}
}

Gruᅵ
Martin

Frank Dzaebel

unread,
Jul 27, 2009, 12:19:59 PM7/27/09
to
Hallo Martin,

> ich glaube du suchst SelectedTab:

Nein Martin, liess Dir Dir einfach die Frage
durch, dann siehst Du, was er sucht.
Hint: .. er will die mittlere, nicht die linke ;-)

Aber das Problem ist ja schon lang gelᅵst.

0 new messages