Autor Beitrag
tomycat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Mi 23.08.17 16:59 
hallo,
ich habe da ein Mega Projekt hinter mir.
Jetzt möchte ich gerne, am Besten Button klick, dass sich alle Button z.b. alle Kanten abgerundet sind und eine dicke Umrandung haben.
Soooooo ungefähr wie Norton oder Antivr soll mein Projekt am Ende aussehen.

Ich weis nicht wo ich ansetzen soll? Nach was googlet man am besten? Hat jemand eine Tut Seite?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 23.08.17 17:33 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 23.08.17 22:00 
Simpelste Lösung wäre etwa so.
stackoverflow.com/qu...ton-c-sharp-winforms

Sei dir bewusst das so aber einfach nur die Ecken abgeschnitten werden. Wenn du was wirklich schönes willst musst du arbeit investieren und das zeichnen komplett selbst übernehmen und nicht nur ein wenig an den Ecken feilen. Wenn du nicht den Standardlook willst gilt eigentlich fast immer komplett selber zeichnen. Den StandardLook mit einem kleinen Twist gibt es eher nicht. Winforms(und die dahinterliegenden Common Controls) sind für einen einheitlichen systemweiten Look ausgelegt die dem Themeing des OS unterliegen.

Für diesen Beitrag haben gedankt: tomycat
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 24.08.17 09:31 
In meinem Beitrag zu myCSharp.de - Eigene Button Klasse erstellen hatte ich mal weitere Links aufgelistet.

Für diesen Beitrag haben gedankt: tomycat
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 24.08.17 09:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Fr 25.08.17 14:06 
Hi,

also ich würde bei dem Thema auf eine WPF Oberfläche setzen. Diese wird ohnehin immer komplett unabhängig von den echten Windows Controls gezeichnet und die Definitonen wie dies zu geschehen hat können beliebig geändert werden. In einem Buch habe ich mal gesehen, das der Autor Sternförmige Button definierte, ich weiß aber nicht mehr welches es war.

Ein Beispiel für einen abgerundeten Button das ich auf die schnelle ergoogled habe wäre:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<Button x:Name="btnBack" Grid.Row="2" Width="300"
                            Click="btnBack_Click">
                    <Button.Template>
                        <ControlTemplate>
                            <Border CornerRadius="10" Background="#463190">
                                <TextBlock Text="Retry" Foreground="White" 
                                           HorizontalAlignment="Center"                                           
                                           Margin="0,5,0,0"
                                           Height="40"
                                           FontSize="20"></TextBlock>
                            </Border>
                        </ControlTemplate>
                    </Button.Template>
                </Button>

Für diesen Beitrag haben gedankt: tomycat
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: So 27.08.17 00:48 
Wenn deine Anwendung einen bestimmten Stil bekommen soll, könntest du auch Grafiken benutzen und den Transparency Key setzen.
Das ginge selbst dann, wenn die Buttons undefinierte Größen haben (z.b. mit Frames).

Beispiel:
user defined image


Zu WPF würde ich auch tendieren, sofern man sich damit anfreunden mag.

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Do 31.08.17 20:37 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Guten Tag tomycat,

schau dir dazu die Funktionen CreateRoundRectRgn() und SetWindowRgn() an.
In der ersten Funktion wird die Form/Rundung bestimmt. Der Rückgabetyp ist laut Doku ein HRGN, dürfte in C# einem IntPtr entsprechen.
Der zweiten Funktion gibt man das Handle des Buttons mit, sowie den Rückgabewert der ersten Funktion.

Die dicke Umrandung zeichnest du z.B. mit Graphics.DrawRectangle().

Mehr brauchst du nicht. Jetzt liegt es an dir.


thx, deine Antwort schmeckt mir am besten. :-)
ich habe ein bischen herumgegoogelt, kann mich mir ein Beispiel machen mit Graphics.DrawRectangle() oder mir ein link mit einenm Tut posten?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 01.09.17 05:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.09.17 20:55 
@Frühlingsrolle
ich studiere gerade deinen Quellcode, ca.90 % ist er mir klar, will aber die 100 % ereichen. :-)
Was mache ich mit buttonEx1, die sind rot ?
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        public class ButtonEx : Button
        {
            private byte _cornerRadian = 0;

            private Rectangle _rect = new Rectangle();
            private Color _rectColor = SystemColors.Control;
            private byte _rectWidth = 0;
            private Pen _pen = new Pen(SystemColors.Control);


            public ButtonEx() { }

            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                _rect = ClientRectangle;
                _rect.Inflate(-_rectWidth + 2, -_rectWidth + 2);
                _pen.Color = _rectColor;
                _pen.Width = _rectWidth;
                e.Graphics.DrawRectangle(_pen, _rect);
            }

            [Browsable(true)]
            public Color RectColor
            {
                get { return _rectColor; }
                set
                {
                    if (_rectColor != value)
                    {
                        _rectColor = value;
                        //_pen.Color = _rectColor; 
                        this.Refresh();
                    }
                }
            }

            [Browsable(true)]
            public byte RectWidth
            {
                get { return _rectWidth; }
                set
                {
                    if (_rectWidth != value)
                    {
                        _rectWidth = value;
                        //_pen.Width = _rectWidth; 
                        this.Refresh();
                    }
                }
            }

            [Browsable(true)]
            public byte CornerRadian
            {
                get { return _cornerRadian; }
                set
                {
                    if (_cornerRadian != value)
                    {
                        _cornerRadian = value;
                        IntPtr hRgn = CreateRoundRectRgn(00, Width, Height, _cornerRadian * 2, _cornerRadian * 2);  // eventuell (optische) Anpassungen vornehmen 
                        SetWindowRgn(Handle, hRgn, true);
                    }
                }
            }

            [DllImport("Gdi32.dll")]
            public static extern IntPtr CreateRoundRectRgn(
                int nLeftRect,
                int nTopRect,
                int nRightRect,
                int nBottomRect,
                int nWidthEllipse,
                int nHeightEllipse);

            [DllImport("User32.dll")]
            public static extern int SetWindowRgn(
                IntPtr hWnd,
                IntPtr hRgn,
                bool bRedraw);
        }

        // Aufruf
        
        private void button1_Click(object sender, EventArgs e)
        {
            buttonEx1.CornerRadian = 6;  // Kantenabrundung(-sradius)
            buttonEx1.RectColor = Color.Blue;  // blauer Rahmen innerhalb ...
            buttonEx1.RectWidth = 6;  // ..
        }
    }
}
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.09.17 21:40 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.09.17 22:10 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  private void button1_Click(object sender, EventArgs e)
        {
            ButtonEx button1x = new ButtonEx();
            button1x.CornerRadian = 2;  // Kantenabrundung(-sradius)
            button1x.RectColor = Color.Blue;  // blauer Rahmen innerhalb ...
            button1x.RectWidth = 2;  // ..
            Controls.Add(button1x);
        }


thx, hmmmm ich habe ca.200 Button viele Textboxen und die Postionen passen sich nach verschiedenen usern an. Ich suche eine Lösung für:
Ich erstelle ein neues Projekt, ziehe 10 Buttons in mein Projekt, Button1 soll alle Buttons (umrandung / Ecken abrunden ) verändern. Ich will statische Buttons verändern. :-)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.09.17 03:03 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Mo 04.09.17 20:10 
zu meinem Grundwissen:
Ich ziehe einen Button von der Toolbox in meine Form1
Dann schreibe ich Button1. und dann kommt meine Auswahl wie versteken unsichbar... Postion.
Leider kommt kein Button1.CornerRadian Da endet mein Grundwissen.:-)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 04.09.17 20:32 
Zitat:
Ich ziehe einen Button von der Toolbox in meine Form1


Ähm du hast da einen neuen Button. Also ziehst du diesen (ButtonEx) auf die Form und keinen Button. Falls es dir nicht bewusst ist. Um das Button Verhalten zu ändern musst du alle Buttons gegen ButtonEx austauschen.

Für diesen Beitrag haben gedankt: tomycat
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 05.09.17 01:04 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: tomycat
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 08.09.17 05:59 
- Nachträglich durch die Entwickler-Ecke gelöscht -