2016-06-06 4 views
-2

So zeigen Sie Steuerelemente an (z. B. RadioButton, Button usw.), wenn Sie OnPaint Methode in C# verwenden? Es ist möglich, benutzerdefinierte Steuerelemente im Konstruktor zu erstellen, aber ich muss allgemeine Steuerelemente von C# verwenden? Bitte vorschlagen.So zeigen Sie Steuerelemente bei Verwendung der OnPaint-Methode in C an #

Ich versuche, allgemeine Steuerelemente anzuzeigen, aber keine Verwendung. Hier finden Sie den Code.

private void PaintPanelOrButton(object sender, PaintEventArgs e) 
    { 

     Point pt1 = new Point(radioButton1.Left + (radioButton1.Width/2), radioButton1.Top + (radioButton1.Height/2)); 
     Point pt2 = new Point(radioButton2.Left + (radioButton2.Width/2), radioButton2.Top + (radioButton2.Height/2)); 

     if (sender is Button) 
     { 
      Button btn = (Button)sender; 
      pt1.X -= btn.Left; 
      pt1.Y -= btn.Top; 
      pt2.X -= btn.Left; 
      pt2.Y -= btn.Top; 
     } 

     e.Graphics.DrawLine(new Pen(Color.Red, 4.0F), pt1, pt2); 
    } 

    public GlassForm() 
    { 
     TextBox t = new TextBox(); 
     t.Left = 1000; 
     t.Top = 900; 
     t.Name = "txt1"; 
     this.Controls.Add(t); 

     this.SuspendLayout(); 
     Button buttonOK = new Button(); 
     buttonOK.Location = new Point(10, 10); 
     buttonOK.Size = new Size(75, 25); 
     buttonOK.Text = "OK"; 

     Button buttonCancel = new Button(); 
     buttonCancel.Location = new Point(90, 10); 
     buttonCancel.Size = new Size(75, 25); 
     buttonCancel.Text = "Cancel"; 

     this.Controls.AddRange(new Control[] { buttonOK, buttonCancel }); 
     this.ResumeLayout(); 
     this.TransparencyKey = transparentColor; 
    } 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     try 
     { 

      base.OnPaint(e); 


      Rectangle r1 = new Rectangle(10, 10, 50, 50); 
      Rectangle r2 = new Rectangle(40, 40, 50, 50); 
      Region r = new Region(r1); 
      r.Union(r2); 

      GraphicsPath path = new GraphicsPath(new Point[] {new Point(45, 45), 
                new Point(145, 55), 
                new Point(200, 150), 
                new Point(75, 150), 
                new Point(45, 45) 
                }, new byte[] { (byte)PathPointType.Start, 
                    (byte)PathPointType.Bezier, 
                    (byte)PathPointType.Bezier, 
                    (byte)PathPointType.Bezier, 
                    (byte)PathPointType.Line 
                   }); 
      r.Union(path); 

      using (Brush transparentBrush = new SolidBrush(transparentColor)) 
      { 
       try 
       { 
        BlurBehindWindowEnabled = true; 
        ExtendFrameEnabled = false; 
        if (ExtendFrameEnabled) 
        { 
         var glassMargins = this.GlassMargins; 

         NativeMethods.DwmExtendFrameIntoClientArea(this.Handle, ref glassMargins); 

         marginRegion = new Region(new Rectangle(10, 10, 600, 100)); 

         e.Graphics.FillRegion(transparentBrush, marginRegion); 
        } 
        else 
        { 
         var glassMargins = new NativeMethods.MARGINS(-1); 
         NativeMethods.DwmExtendFrameIntoClientArea(this.Handle, 
          ref glassMargins); 
        } 

        if (BlurBehindWindowEnabled) 
        { 
         ResetDwmBlurBehind(true, e.Graphics); 
         e.Graphics.FillRegion(transparentBrush, r); 
        } 
        else 
        { 
         ResetDwmBlurBehind(false, null); 
        } 
       } 
       catch (Exception ex) 
       { 
        lbAeroGlassStyleSupported.Text = "Error"; 
        demoForm.Show(); 
       } 
      } 
      this.ShowInTaskbar = false; 
      this.TopMost = true; 
      this.WindowState = FormWindowState.Maximized; 
      clsTaskbar.Show(); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

}

+0

Nicht sicher, was Sie wollen. Wenn Sie nur Dinge zeichnen möchten, die wie ein normales Steuerelement in dem System aussehen, auf dem Sie gerade arbeiten, können Sie die zahlreichen 'Renderer'-Klassen verwenden, z. 'CheckBoxRenderer.DrawCheckBox (..)' oder benutze 'ControlPaint' .. – TaW

+0

Ich nehme an, der Name' GlassForm' ist ein Hinweis. Das Problem ist, dass schwarzer Text als transparent dargestellt wird und die Steuerelemente daher falsch aussehen? Wenn dies der Fall ist, sollten Sie beschreiben, dass Sie in der Frage keine Frage stellen, die nicht zusammenhängt (die Frage, die jeder beantwortet). –

Antwort

1

Wenn ich richtig verstehe, wollen Sie etwas, das genau so aussehen wie „normale“ Kontrollen, aber sind eigentlich nur Bilder.

Wenn ja, können Sie ControlPaint Klasse verwenden: es viele Methoden hat Tasten zu zeichnen, checkBoxex, Radiobuttons, usw.

von ihnen die meisten über einen Grafikparameter erfordern, so dass Sie sie leicht aus Ihrem OnPaint Ereignis aufrufen Handler

0

Wenn Sie die Steuerelemente selbst zeichnen möchten, können Sie innerhalb des .NET-Frameworks nach einer xxxRenderer-Klasse suchen. Durch diese verwenden, können Sie check boxes, radio buttons, normal buttons usw.

Aber beachten Sie ziehen, dass bei einigen ganz der Arbeit ist, das gleiche Verhalten wie die integrierte Steuerelemente (Klicken, schweben, Fokus, Tastaturkürzel zu reproduzieren, etc.).

Verwandte Themen