Announcement

Collapse
No announcement yet.

Rahmen erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rahmen erstellen

    Hallo!

    Ich möchte gerne einen Rahmen (Rechteck) aus einem Erreignis erstellen. Dieser sollte wirklich nur ein Rahme sein, damit all die anderen Steuerelemente noch bedienbar sein müssen.

    Ich hab das ganze schon mal mit
    Code:
            
             private void button1_Click(object sender, EventArgs e)
            {
                Graphics graph = this.CreateGraphics();
                graph.DrawRectangle(new Pen(Brushes.Red, 2), 1, 1, 100, 100);
            }
    versucht.
    Doch leider hab ich einen Scroll - Balken. Wenn ich nun weiter nach rechts gehe, hat er das Rechteck nicht gezeichnet.

    Danach habe ich das ganze versucht mit einem Label zu gestalten. Da habe ich nun das Problem, das das ganze nicht im Hintergrund ist, sonder im Vordergrund und somit kann ich die anderen Steuerelemente nicht mehr bedienen. Dieses Steuerelement generiere ich vor den anderen Elemente (Buttons). Leider sind die Button danach im Hintergrund!

    Code:
             lblRahmen = new Label();
             lblRahmen.Location = new Point(0, 0);
             lblRahmen.Size = new Size(1200,160);
             lblRahmen.BackColor = Color.Transparent;
             lblRahmen.BorderStyle = BorderStyle.FixedSingle;
             
             this.Controls.Add(lblRahmen);
    Was schlägt ihr vor? Was ist die beste Lösung?

  • #2
    Ich habe selbst keine Erfahrung und damit keine Ahnung vom Zeichnen. Ich weiß aber, dass du über ein Paint-Ereignis gehen musst, dort steht über die EventArgs Graphics zur Verfügung.

    Gruß Jürgen

    Comment


    • #3
      Wenn du etwas von Hand zeichnen willst gehört das in den Paint Event. Dieser wird beim neu zeichnen der Form aufgerufen und du kannst dann dort dafür sorgen das jedes mal das richtige gezeichnet wird.

      Soll das mit dem Zeichnen des Rahmens wirklich dynamisch sein? Oder geht es nur um genau einen Rahmen an einer fixen Position ein bzw. ausschaltbar sein soll? Dann würde ich einfach ein Panel nehmen die nötigen Controls auf dem Panel platzieren und in dessen Paint Event den Rahmen malen. Dann tut man sich leichter mit dem positionieren.

      [Highlight=C#]private void panel1_Paint(object sender, PaintEventArgs e)
      {
      e.Graphics.DrawRectangle(new Pen(Color.Red, 2), new Rectangle(1,1,panel1.Width-2, panel1.Height-2));
      }[/Highlight]

      Comment


      • #4
        Der Rahmen ist immer gleich groß. Dieser wird aber so dargestellt, das nach rechts gescrollt werden muss um wirklich alle Positionen der Buttons zu sehen. Wenn ich das ganze über das Draw Rectangle mache, zeichnet er mir zwar den Rahmen, aber leider nicht das ihm angegeben wird, d.h. es wird das Quadrat nur bis zu diesem Punkt gezeichnet, wohin auch die Anzeige reicht, danach muss ja gescrollt werden. An diesem Punkt ist fertig mit dem Quadrat.

        Ich generiere diese paar Buttons je nach einem Zustand, damit der Bediener für die angewählte Funktion nur diese Buttons zu Verfügung hat, bzw. auch nur diese bestimmten Positionen anwählen kann.

        Das Fenster/Panel wird beim Laden der Funktion vorher mit

        this.Controls.Clear();

        gelöscht.

        Deshalb generiere ich das label und die Buttons je nach Funktion neu.

        [highlight=c#]
        Label lblRahmen;
        Button btnAllAktiv;


        lblRahmen = new Label();
        lblRahmen.Location = new Point(0, 0);
        lblRahmen.Size = new Size(1200,160);
        lblRahmen.BackColor = Color.Transparent;
        lblRahmen.BorderStyle = BorderStyle.FixedSingle;

        this.Controls.Add(lblRahmen);


        btnAllAktiv = new Button();
        btnAllAktiv.Text = "Alle Aktivieren";
        btnAllAktiv.Font = new Font("Microsoft Sans Serif", 9, FontStyle.Bold);
        btnAllAktiv.Size = new Size(200, 45);
        btnAllAktiv.Location = new Point(20, 220);
        btnAllAktiv.UseVisualStyleBackColor = true;
        btnAllAktiv.Click += new EventHandler(btnAllAktiv_Click);

        this.Controls.Add(btnAllAktiv);
        [/highlight]

        Nun ist das Label aber immer im Vordergrund. Dieses möchte ich gerne in den Hintergrund stellen. Wenn ich das ganze im Editor(Entwurf) zeichne, so kann ich per Rechter Maustaste sagen "In den Hintergrund" bzw. "In den Vordergrund". Dies muss ich ja per Code auch machen können, oder nicht?
        Zuletzt editiert von Jürgen Thomas; 03.05.2010, 11:29. Reason: [highlight=c#] eingefügt, künftig bitte selbst erledigen (Code ist kein Zitat)

        Comment


        • #5
          Wenn ich das ganze über das Draw Rectangle mache, zeichnet er mir zwar den Rahmen, aber leider nicht das ihm angegeben wird, d.h. es wird das Quadrat nur bis zu diesem Punkt gezeichnet,
          Dann hast du das Zeichnen nicht wie von uns geraten in den Paint Event verlagert.

          Nun ist das Label aber immer im Vordergrund. Dieses möchte ich gerne in den Hintergrund stellen. Wenn ich das ganze im Editor(Entwurf) zeichne, so kann ich per Rechter Maustaste sagen "In den Hintergrund" bzw. "In den Vordergrund". Dies muss ich ja per Code auch machen können, oder nicht?
          Controls haben jeweils ein BringToFront bzw. SendToBack Methode.

          Comment

          Working...
          X