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
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
> [...] 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
> 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
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
> 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.