Autor |
Beitrag |
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 15: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
|
Verfasst: Mi 23.08.17 16:33
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
Ralf Jansen
Beiträge: 4706
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 23.08.17 21: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
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 24.08.17 08: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
|
Verfasst: Do 24.08.17 08:56
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
doublecross
Beiträge: 149
Erhaltene Danke: 27
Windows 7
C#; Visual Studio 2015
|
Verfasst: Fr 25.08.17 13: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:
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
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 26.08.17 23: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:
Zu WPF würde ich auch tendieren, sofern man sich damit anfreunden mag.
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Do 31.08.17 19:37
Frühlingsrolle hat folgendes geschrieben : | 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
|
Verfasst: Fr 01.09.17 04:26
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Sa 02.09.17 19: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 ?
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; this.Refresh(); } } }
[Browsable(true)] public byte RectWidth { get { return _rectWidth; } set { if (_rectWidth != value) { _rectWidth = value; this.Refresh(); } } }
[Browsable(true)] public byte CornerRadian { get { return _cornerRadian; } set { if (_cornerRadian != value) { _cornerRadian = value; IntPtr hRgn = CreateRoundRectRgn(0, 0, Width, Height, _cornerRadian * 2, _cornerRadian * 2); 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); }
private void button1_Click(object sender, EventArgs e) { buttonEx1.CornerRadian = 6; buttonEx1.RectColor = Color.Blue; buttonEx1.RectWidth = 6; } } } |
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 02.09.17 20:40
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Sa 02.09.17 21:10
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; button1x.RectColor = Color.Blue; 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
|
Verfasst: So 03.09.17 02:03
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
tomycat
Beiträge: 265
Erhaltene Danke: 1
|
Verfasst: Mo 04.09.17 19: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
Beiträge: 4706
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 04.09.17 19: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
|
Verfasst: Di 05.09.17 00:04
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: tomycat
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 08.09.17 04:59
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|