Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Automatisches Scrollen des Controls mit dem Fokus in den sichtbaren Bereich verhindern
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

Automatisches Scrollen des Controls mit dem Fokus in den sichtbaren Bereich verhindern

beantworten | zitieren | melden

Moin @all,

ich habe eine Frage die sich wahrscheinlich relativ schnell beantworten lässt.

Ich habe ein Control in das mehere (selbst gebastelte) Controls angezeigt werden. Zwischen diesen Controls ist eine xy Matrix. Es gibt x Controls (überhalb der xy Matrix) und y Controls (links von der Matrix). Wenn ich jetzt die Maus in mein xy Control bewege wird das jeweilige x und y Control farblich markiert. Das funktioniert einwanfrei.

Wenn die xy Matrix aber so groß wird für das hauptcontrol dann wird automatisch ein Scrollbalken (vertikal) eingefügt. Das funktioniert auch.

Aber wenn ich nun nach unten scrolle und über meine xy Matrix fahre, so springt der Scrollbalken wieder nach oben und zeigt mir die aktuellen x Controls an. (wahrscheinlich bekommt das x Control den focus). Diese Springen würde ich gerne vermeiden. Weiss jemand wie das geht. Fettes Merci
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Hallo BeZi,

ich glaub ohne ein Screenshot zu posten, wird nicht mal einer verstehen was du überhaupt meinst!
Again what learned...
private Nachricht | Beiträge des Benutzers
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

beantworten | zitieren | melden

Hoffe so ist es verständlicher. Sorry kann keinen Screenshot machen, sensible Daten...
Wenn ich jetzt bei X mit der Maus klicke und fahre dann umher in der Matrix dann sprint der scrollbalken immer nach ganz oben.

Siehe Anhang
Attachments
private Nachricht | Beiträge des Benutzers
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

beantworten | zitieren | melden

Ein weiteres Verhalten das ich jetzt festgestellt habe ist folgendes:
Wenn ich in die XY-Matrix klicke (siehe stelle X im angehängten Bild und die XY-Matrix geht noch über das komplette Control hinaus in y Richtung, deswegen Scrollbar), dann zentriert die Scrollbar das komplette Control und das X wird nicht an der gewünschten Stelle gesetzt. Das gewünschte X wird also an einer anderen Stelle gesetzt. Kann man dieses Zentrieren abschalten ? Sorry das ich als Bild nur eine Excelvorlage verwenden kann.
Attachments
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

sorry, aber ich denke so kann dir keiner helfen. Dein Problem in excel darzustellen ist doch sehr abwegig. Welche Controls nutzt du? Wenn du es wegen sensiblen Daten nicht posten kannst, dann lösche einfach die Daten aus dem Screenshot!
Again what learned...
private Nachricht | Beiträge des Benutzers
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

beantworten | zitieren | melden

Sorry, aber nein das geht nicht, denn die eigenentwickelten Controls gehören mit zu dem Umfang erklären dadurch schon zuviel und haben auch keine relevanz was das verhalten erklärt. Das gleiche passiert auch mit einem Standardbutton

So wie es scheint setzt AutoScroll die Scrollbalken immer auf den focus des Controls das geklickt wird.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo BeZi,
Zitat
So wie es scheint setzt AutoScroll die Scrollbalken immer auf den focus des Controls das geklickt wird.
ja, so ist das.

Für ein Control dieser Art empfehle ich dir dringend, es selbst zu zeichnen (siehe [Artikel] Zeichnen in Windows-Programmen) und nicht aus anderen Controls zusammenzusetzen. Erstmal verursacht das die von die beschriebenen Probleme und zum anderen bekommt man auf diese Weise sehr schnell Performance-Probleme.


Hallo rollerfreak2,

also ich persönlich kann mir anhand der Bilder eigentlich ganz gut vorstellen, worum es geht.

herbivore
private Nachricht | Beiträge des Benutzers
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

beantworten | zitieren | melden

Ich habe eine MainControl in das die ganzen anderen "Sub"-Controls (auch eigene) eingestzt werde. Funktioniert alles einwandfrei. Keine Performanceprobleme :-) Nur diese eine Problem mit dem springen der Scrollbar bekomme ich nicht abgestellt.

Und danke wegen dem "Verständnisproblem". Also meine Frau hat das sogar kapiert

Gibt es eine Lösung für das Scrollproblem @Herbivore ?
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Zunächst mal: Ich würde das mit einem DataGridView versuchen, in dem ich _CellPaint-Event die RowHeaderCells und die ColumnHeaderCells selbst zeichne. Diese Zellen sind leicht zu identifizieren, wenn die nämlich gezeichnet werden sollen, steht e.ColumnIndex / e.RowIndex jeweils auf -1.

Bei deinem Ansatz wundere ich mich, dass die X-/-Y - Controls den Focus erhalten, obwohl sie nur eine BackgroundColor zugewiesen bekommen.

Ich kann das nicht überprüfen, evtl. ist dein EinfärbeCode schuld, aber vlt. ist es auch tatsächlich das Zuweisen der BackColor, die das Scrollen auslöst (was ich eiglich nicht erwarten täte).
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo BeZi,

meine Einschätzung ist, dass es mindestens ziemlich schwierig sein wird, das Scrollproblem zu umgehen. Wenn ich mich recht erinnere ist es sogar so, dass eine TextBox, die den Focus schon hat, und die man absichtlich aus dem sichbaren Bereich scrollt, wieder automatisch in den sichtbaren Bereich zurück gescrollt wird, sobald man ein Zeichen eingibt. Wenn man es überhaupt irgendwie schaffen kann, dann wohl ziemlich lowlevel, d.h. in der WndProc [EDIT] siehe z.B. Control in Panel - Autoscroll - Scrollen des Controls mit Fokus in den sichtbaren Bereich verhindern [/EDIT]

herbivore
private Nachricht | Beiträge des Benutzers
BeZi
myCSharp.de - Member



Dabei seit:
Beiträge: 153

Themenstarter:

beantworten | zitieren | melden

Vielen Dank erstmal....
Also @"ErfinderdesRades".... Die Controls sind schon fertig. Und ein Datagridview würde ich für soetwas niemals misshandeln..... Sowas macht man schön selbst ;) . Aber trozdem danke.

@herbivore: Ok, ich versuche die Sache so zu umschiffen das ich wenn meine Maus in das jeweilige SubControl eintritt sich die Sache direkt focusiert mit ScrollControlIntoView. So ist das Springen zumindest einwenig besser. Naja vielleicht fällt mir noch eine andere Lösung ein.

Fettes merci nach Berlin... und die natürlich anderen auch.....
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

beantworten | zitieren | melden

Falls jemand vor der gleichen Problem steht (wie ich gerade):
In dem Control, das die Scrollbars anzeigt, die ScrollableControl.ScrollToControl-Methode (System.Windows.Forms) überschreiben:


protected override Point ScrollToControl(Control activeControl)
{
	return base.ScrollToControl(this);
}

Moderationshinweis von herbivore (24.08.2013 - 07:18)

Eine Variante dieses Vorschlags findet sich in Control in Panel - Autoscroll - Scrollen des Controls mit Fokus in den sichtbaren Bereich verhindern.

private Nachricht | Beiträge des Benutzers