none
StartPosition für Forms, C#2008Express,SQL RRS feed

  • Frage

  • Hallo, ich bitte wieder um Hilfe.
    Die StartPosition für Forms kann man nach meiner Kenntnis nur sehr eingeschränkt einstellen.
    Daher meine Fragen:
    1: Kann man durch Vorgabe von zB. Koordinaten die Position beliebig einstellen ?
    2: Wenn das nicht geht, kann man ein zweites Forms an ein anderes an eine Seite
        andocken, also  nicht nur einfach darüber setzen ?
    3: Die MessageBox kommt grundsätzlich anscheinend nur im CenterScreen.
        Kann man diese auch gezielt wo anders positionieren ?

    Ich wünsche euch allen ruhige und besinnliche Weihnachten und das Allerbeste
    für 2010 !!
    Vielen Dank !
    Hermann
    Montag, 21. Dezember 2009 13:16

Antworten

  • Hallo Hermann,

    die StartPosition kannst Du nach belieben festlegen, wenn Du die gleichlautende Eigenschaft auf Manual stellst und vor dem Anzeigen des Formulars über die Location Eigenschaft die Koordinaten festlegst, wo Dein Formular erscheinen soll. Ich sehe da keine Einschränkung.

    Die MessageBox sieht eine solche Eingriffsmöglichkeit nicht vor. Meistens ist es ja durchaus sinnvoll, dass sie in der Bildschirmmitte erscheint. Wenn das in Deinem Fall nicht gewünscht ist, wäre die einfache Lösung, ein eigenes Formular zu verwenden, das Du frei positionieren und gestalten kannst. Aufwändiger wäre dagegen einen MessageHook zu installieren und auf die Erstellung des MessageBox fensters zu reagieren, um dieses an die gewünschte Position zu bringen.

    Centering MessageBox, Common DialogBox or Form on applications
    http://www.codeproject.com/KB/dialog/CenterDialog.aspx

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Montag, 21. Dezember 2009 14:05
    Beantworter
  • Hallo Hermann,

    wenn Du Dein Formular nur beim Anzeigen rechts neben Deinem bestehendem Formular anzeigen möchtest, reichen folgende Anweisungen bereits aus:

    namespace FormsDockingCS
    {
      public partial class Form1 : Form
      {
        private Form2 f2;
    
        public Form1()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          f2 = new Form2();
          f2.StartPosition = FormStartPosition.Manual;
          f2.Location = new Point(this.Bounds.Right, this.Bounds.Top);
          f2.Show();
        }
      }
    }
    

    Möchtest Du, dass das Formular "angedockt" bleibt, auch wenn Form1 verschoben wird, musst Du die Position von Form2 im Move Event mitführen:

        private void Form1_Move(object sender, EventArgs e)
        {
          if (f2 == null) return;
    
          f2.Location = new Point(this.Bounds.Right, this.Bounds.Top);
        }


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Mittwoch, 23. Dezember 2009 11:25
    Beantworter

Alle Antworten

  • Hallo Hermann,

    die StartPosition kannst Du nach belieben festlegen, wenn Du die gleichlautende Eigenschaft auf Manual stellst und vor dem Anzeigen des Formulars über die Location Eigenschaft die Koordinaten festlegst, wo Dein Formular erscheinen soll. Ich sehe da keine Einschränkung.

    Die MessageBox sieht eine solche Eingriffsmöglichkeit nicht vor. Meistens ist es ja durchaus sinnvoll, dass sie in der Bildschirmmitte erscheint. Wenn das in Deinem Fall nicht gewünscht ist, wäre die einfache Lösung, ein eigenes Formular zu verwenden, das Du frei positionieren und gestalten kannst. Aufwändiger wäre dagegen einen MessageHook zu installieren und auf die Erstellung des MessageBox fensters zu reagieren, um dieses an die gewünschte Position zu bringen.

    Centering MessageBox, Common DialogBox or Form on applications
    http://www.codeproject.com/KB/dialog/CenterDialog.aspx

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Montag, 21. Dezember 2009 14:05
    Beantworter
  • Hallo Thorsten,
    danke für deine Antwort, das Positionieren klappt jetzt wie gewünscht.
    Wahrscheinlich denke ich aber zu kompliziert, weil ich folgendes nicht schaffe :

    - ich habe ein Form f1  mit Button b1 und ein Form f2
    - wenn ich auf b1 clicke, wird f2 aufgerufen
    - f2 soll rechts an f1 andocken (es hat gleiche Höhe)

    ich kämpfe mit IsMdiContainer, MdiLayout usw. schaffe das aber nicht.
    Mein Gefühl sagt mir aber, dass die Sache mit wenigen CodeZeilen erledigt sein muss.
    Aber mit welchen ?
    Kannst Du bitte nochmals helfen ?
    (Arbeite mit C#2008EXPRESS)

    Vielen Dank!


    Mittwoch, 23. Dezember 2009 11:08
  • Hallo Hermann,

    wenn Du Dein Formular nur beim Anzeigen rechts neben Deinem bestehendem Formular anzeigen möchtest, reichen folgende Anweisungen bereits aus:

    namespace FormsDockingCS
    {
      public partial class Form1 : Form
      {
        private Form2 f2;
    
        public Form1()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          f2 = new Form2();
          f2.StartPosition = FormStartPosition.Manual;
          f2.Location = new Point(this.Bounds.Right, this.Bounds.Top);
          f2.Show();
        }
      }
    }
    

    Möchtest Du, dass das Formular "angedockt" bleibt, auch wenn Form1 verschoben wird, musst Du die Position von Form2 im Move Event mitführen:

        private void Form1_Move(object sender, EventArgs e)
        {
          if (f2 == null) return;
    
          f2.Location = new Point(this.Bounds.Right, this.Bounds.Top);
        }


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Mittwoch, 23. Dezember 2009 11:25
    Beantworter
  • Hallo Thorsten,
    vielen Dank für deine Hinweise, vorallem für die CodeZeilen.
    Damit ist das Problem aus der Welt geschafft.
    Gruss !
    Hermann
    Dienstag, 29. Dezember 2009 10:52