Zmiana koloru tła wyłączonych elementów.

Zmiana koloru tła wyłączonych elementów.
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Cześć, napisałem program w c# pod net frameworka 3,5 i zastanawiam się jak zmienić kolory elementów zaznaczonych na czerwono. W internecie nic nie mogłem znaleźć, albo nie jak użyć kodu, który wklejają. Oto zdjęcie:

1234.png

Chodzi o kolor tła wyłączonego comboboxa, tekst wyłączonego checkboxa i sam kwadracik checkboxa, tak, aby nie dawało po oczach.

Dzięki.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 8 godzin
0

To jest WinForms?
WPF?

BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Tak dokładnie - formularz Windows Forms

edytowany 1x, ostatnio: bboylubsko
BO
  • Rejestracja:około 6 lat
  • Ostatnio:około 18 godzin
  • Postów:214
0

Spraw wygląda na prostą ale tak do końca nie jest potrzebujesz tak naprawdę przechwycić event odpowiadający za rysowanie i samemu narysować

Kopiuj
        private void button1_Paint(object sender, PaintEventArgs e)
        {
            dynamic btn = (Button)sender;
            dynamic drawBrush = new SolidBrush(btn.ForeColor);
            dynamic sf = new StringFormat
            {
                Alignment = StringAlignment.Center,
                LineAlignment = StringAlignment.Center
            };
            btn.Text = string.Empty;
            e.Graphics.DrawString("Oblicz używając wymiarów X i Y", btn.Font, drawBrush, e.ClipRectangle, sf);
            drawBrush.Dispose();
            sf.Dispose();
        }

       private void button1_EnabledChanged(object sender, EventArgs e)
        {
            dynamic btn = (Button)sender;
            btn.ForeColor = btn.Enabled == false ? Color.Green : Color.Black;
        }

Minus jest taki ,że nie odwołasz się potem do button.Text no ale chyba nie powinno to być nie zbędne.

edytowany 1x, ostatnio: Botek
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Cześć, próbuję uruchomić kod, lecz napotkałem kłopot.
Pokazuje się błąd:

Brak wymaganej przez kompilator składowej „Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create.

Wszedłem w Projekt -> Zarządzaj pakietami NuGet -> wyszukałem Microsoft.CSharp.dll.
Pokazuje się błąd:

Nie można zainstalować pakietu „Microsoft.CSharp 4.7.0”. Próbujesz zainstalować ten pakiet w projekcie, którego celem jest „.NETFramework,Version=v3.5”, ale pakiet nie zawiera żadnych odwołań zestawu ani plików zawartości zgodnych z tą strukturą. Aby uzyskać więcej informacji, skontaktuj się z autorem pakietu.

Znalazłem w internecie, że dynamic można użyć od NET 4.0.

edytowany 1x, ostatnio: bboylubsko
G1
  • Rejestracja:około 4 lata
  • Ostatnio:4 dni
  • Postów:506
0

Tak chyba prościej:

Kopiuj
        private void textBox1_EnableChanged(object sender, EventArgs e)
        {
            textBox2.BackColor = textBox2.Enabled ? Color.Yellow : Color.Red;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Enabled = !textBox2.Enabled;
        }
BO
Nie zadziała ci to na ForeColor więc może i prościej ale nie zadziała. Chociaż fakt faktem autor pisał o kolorze tła ale domyśliłem się ,że jednak chodzi o ForeColor
BB
Napisałem, że kolor tła dla combobox :)
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Znalazłem w internecie jak narysować CheckBox. Ma bardzo dużo opcji do konfiguracji. Autor pomysłu nie wkleił kodu i 3,5 godziny klepałem wszystko razem z nim z filmu na YouTubie, ale cóż - chciałem mieć ładnie. No pojawił się kłopot - niestety jest on bardzo wolny. Jeśli mógłby ktoś zobaczyć byłbym wdzięczny.

Są jeszcze inne niedociągnięcia:
a) zaznacza CheckBox gdy nie przekazuje w programie, że jest zaznaczony po kliknięciu na tekst (widać na filmie).
b) przydała by się opcja lub wskazówka jak dodać jeszcze kolor disabled Checkbox.

Bardzo mi się spodobała forma praktycznie dowolnego edytowania pod swoje potrzeby. Niestety tak wolna reakcja dyskwalifikuje ten cały wysiłek ;p.

Oto pliki, które wykonałem: Test.zip

.

gswidwa1 napisał(a):

Tak chyba prościej:

Kopiuj
        private void textBox1_EnableChanged(object sender, EventArgs e)
        {
            textBox2.BackColor = textBox2.Enabled ? Color.Yellow : Color.Red;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Enabled = !textBox2.Enabled;
        }

Coś nie mogę tego przełożyć na checkBox - z textBox działa fajnie - pewnie znowu coś mieszam.
Użyłem takiego kodu:

Kopiuj
checkBox10.ForeColor = checkBox10.Enabled ? Color.Yellow : Color.Red;
G1
  • Rejestracja:około 4 lata
  • Ostatnio:4 dni
  • Postów:506
0

Mój przykład działa dla wszystkich kontrolek. Pokaz kod checkboxa

edytowany 1x, ostatnio: gswidwa1
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0
Kopiuj
        private void checkBox10_EnabledChanged(object sender, EventArgs e)
        {
            checkBox10.ForeColor = checkBox10.Enabled ? Color.Yellow : Color.Red;
        }

        private void comboBox1_EnabledChanged(object sender, EventArgs e)
        {
            comboBox1.BackColor = comboBox1.Enabled ? Color.Yellow : Color.Red;
        }

        private void checkBox11_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox11.Checked == false)
            {
                checkBox10.Enabled = false;
                comboBox1.Enabled = false;
            }
            else
            {
                checkBox10.Enabled = true;
                comboBox1.Enabled = true;
            }
        }

Zmienia kolor tekstu tylko dla włączonego checkBox oraz kolor tła dla włączonego combobox.
Niestety przy wyłączonych kontrolkach nic się nie zmienia i zostają domyślne ustawienia.
Dodam, że tło zmienia okej - (checkBox10.BackColor), niestety napis po wyłączeniu jest nadal czarny.

edytowany 1x, ostatnio: bboylubsko
BO
Do napisu masz to co ja ci podałem
BO
  • Rejestracja:około 6 lat
  • Ostatnio:około 18 godzin
  • Postów:214
0
Kopiuj
        private void button1_Paint(object sender, PaintEventArgs e)
        {
            Button btn = (Button)sender;
            SolidBrush drawBrush = new SolidBrush(btn.ForeColor);
            StringFormat sf = new StringFormat
            {
                Alignment = StringAlignment.Center,
                LineAlignment = StringAlignment.Center
            };
            btn.Text = string.Empty;
            e.Graphics.DrawString("Oblicz używając wymiarów X i Y", btn.Font, drawBrush, e.ClipRectangle, sf);
            drawBrush.Dispose();
            sf.Dispose();
        }

       private void button1_EnabledChanged(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            btn.ForeColor = btn.Enabled == false ? Color.Green : Color.Black;
        }

Po prostuj użyj kodu który ci podałem tylko wyrzuć dynamic pisałem na szybko z palca więc nie wiem czy zadziała

edytowany 2x, ostatnio: Botek
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Dzięki! Coś zadziałało - drobny problem z tekstem tylko.

Kopiuj
        private void checkBox10_Paint(object sender, PaintEventArgs e)
        {
            CheckBox btn = (CheckBox)sender;
            SolidBrush drawBrush = new SolidBrush(btn.ForeColor);
            StringFormat sf = new StringFormat
            {
                Alignment = StringAlignment.Center,
                LineAlignment = StringAlignment.Center
            };
            btn.Text = " ";
            e.Graphics.DrawString("TEEEEEESTTTT", btn.Font, drawBrush, e.ClipRectangle, sf);
            drawBrush.Dispose();
            sf.Dispose();
        }

        private void checkBox10_EnabledChanged(object sender, EventArgs e)
        {
            CheckBox btn = (CheckBox)sender;
            btn.ForeColor = btn.Enabled == false ? Color.Green : Color.Red;
        }

Załączam plik CheckBox.cs z paczki Test.zip. CheckBox.cs

edytowany 3x, ostatnio: bboylubsko
BO
  • Rejestracja:około 6 lat
  • Ostatnio:około 18 godzin
  • Postów:214
0

Musiałbym dokładnie sprawdzić jak się rysuje cheackboxy ale można też zastosować mały trick zamiast wyłączać cheackboxa można po prostu wyłączyć mu zaznaczanie

Kopiuj
 checkBox1.AutoCheck = false;

Nie wiem na ile cię takie rozwiązanie satysfakcjonuje.

BB
Hej, mógłbyś zerknąć do pliku CheckBox.cs który załączyłem? Chciałbym połączyć te dwa rozwiązania - checkBox byłby w pełni konfigurowalny. Tam już jest rozwiązany problem rysowania tekstu.
G1
  • Rejestracja:około 4 lata
  • Ostatnio:4 dni
  • Postów:506
0

A tak z ciekawości: nie chcesz przerobić ten projekt na wpf? Jest tam dużo więcej opcji i wszystko jest w sumie "lepsiejsze". W tym to co chcesz uzyskać to kilka linijek kodu
Dla zachęty:

Kopiuj
<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <CheckBox Content="Mój checkbox">
            <CheckBox.Style>
                <Style TargetType="{x:Type CheckBox}">
                    <Setter Property="Foreground" Value="Red"/>
                    <Style.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="#FFADADAD"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>
    </Grid>
</Window>

Enabled:
screenshot-20210905221503.png
Disabled:
screenshot-20210905221607.png

p.s. Naprawdę warto. Jak gdzieś utkniesz zawsze możesz wrócić tutaj z pytaniem ;D

edytowany 3x, ostatnio: gswidwa1
BB
  • Rejestracja:około 4 lata
  • Ostatnio:5 miesięcy
  • Postów:39
0

Wolałbym zostać już przy bieżącej formie. Dostałem taką wskazówkę na jednym z zagranicznych forów:

Kopiuj
Replace the IsChecked Field with a public Property. In the setter, 
call a virtual method (say OnCheckedChanged) to invoke a custom event handler (say CheckedChanged). 
Handle this event in your implementation to do whatever you need whenever the check state changes.

Czy ktoś rozumie o co chodzi? :)

edytowany 1x, ostatnio: bboylubsko
G1
Jak wolisz. Mi nauka xamla szybko przyszła i nie przejdę na winform nigdy 😁 poza tym, możesz w WPF hostować kontrolki z winforms
BO
  • Rejestracja:około 6 lat
  • Ostatnio:około 18 godzin
  • Postów:214
0

Generalnie jest to do zrobienia ale jest troszkę dłubania i zgadywania (pewnie da się to też policzyć) ale po kolei na początku tak jak już pisałem musisz zrobić taką funkcję

Kopiuj
   private void checkBox1_EnabledChanged(object sender, EventArgs e)
        {
            CheckBox checkbox = (CheckBox)sender;
            
            checkbox.ForeColor = checkbox.Enabled ? Color.Yellow : Color.Red;
        }

Następnie też jak ci wcześniej pisałem musisz namalować sobie twojego checkBoxa ale tu niestety nie jest lekko łatwo i przyjemnie bo to dosyć złożona w rysowaniu kontrolka

Kopiuj
 private void checkBox1_Paint(object sender, PaintEventArgs pevent)
        {
            pevent.Graphics.Clear(BackColor);

            using (SolidBrush brush = new SolidBrush(checkBox1.ForeColor))
                pevent.Graphics.DrawString("Oblicz używając wymiarów X i Y", Font, brush, 27, 4);

            Point pt = new Point(10, 0);
            Rectangle rect = new Rectangle(pt, new Size(16, 16));

            pevent.Graphics.FillRectangle(Brushes.Beige, rect);

            if (checkBox1.Checked)
            {
                using (SolidBrush brush = new SolidBrush(Color.Blue))
                using (Font wing = new Font("Wingdings", 18f))
                    pevent.Graphics.DrawString("ü", wing, brush, 3, -2);
            }
            pevent.Graphics.DrawRectangle(Pens.DarkSlateBlue, rect);

            Rectangle fRect = ClientRectangle;

            if (Focused)
            {
                fRect.Inflate(-1, -1);
                using (Pen pen = new Pen(Brushes.Gray) { DashStyle = DashStyle.Dot })
                    pevent.Graphics.DrawRectangle(pen, fRect);
            }
        }

U mnie wygląda to tak
screenshot-20210917204345.png

A po dezaktywizacji
screenshot-20210917204410.png

Nie wygląda to idealnie ale sam musisz sobie to wystylować bo to tylko kwestia zabawy a ja zarobiony człowiek jestem ;)

edytowany 5x, ostatnio: Botek
Zobacz pozostałe 3 komentarze
BO
Jest on lepiej zintegrowany z windowsem, jest zdecydowanie bardziej integralny nie piszemy jakiś stylów w xmlu tylko wszystko mamy w c#. Poza tym gdy używasz devexpressa to praktycznie wszystkie minusy znikają.Moim zdaniem zdecydowanie prościej jest stworzyć apkę spójną z interfejsem windowsa w winforms niż w wpf. Jak by odpowiedź była taka prosta to wszystkie firmy stosowały by wpf a tymczasem jest to w miarę wyrównane
G1
Dev Express to ten zestaw kontrolek za miliony? :o
G1
Zacząłem o tym czytać i wyczytałem, że tak jak kontrolki z winforms można hostować w WPF tak też można to zrobić odwrotnie. https://docs.microsoft.com/pl-pl/dotnet/desktop/wpf/advanced/walkthrough-hosting-a-wpf-composite-control-in-windows-forms?view=netframeworkdesktop-4.8
BO
Czy ja wiem czy za miliony 4.5 tysiąca za rok jeśli robisz poważną apkę to nie powinien być duży problem szczególnie ,że za miesiąc wychodzi 375 zł zdaję sobie sprawę ,że tak do prywatnego użycia jest to za drogo ale pewnie są inne zestawy kontrolek.
G1
Masz rację, dla firmy co ma obrót konkretny to jest żaden wydatek
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)