Forum: PC-Programmierung windows forms grit radio button einlesen/ c# windows


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit einem Radio Button vom Bediener eine ja nein Antwort. 
diese Antwort soll anschließend in einer Tabelle angezeigt werden 
(nachdem ein button zur Bestätigung gedrückt wird). wie gehe ich vor?
Ausgangszustand: Tabelle erstellt, button und Radio Buttons erstellt. 
wie kann ich die info per button in die Tabelle schreiben?

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ich habe vor, das ganze mittels einer globalen Variablé, deren Wert 
durch den Button verändert wird, zu realisieren und die Abfrage mittels 
eines Events zu steuern. Mit welcher Methode kann ich den wert der Radio 
Buttons in die Tabelle schreiben?

von Key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
niemand? müsste ja eign soetwas sein wie

if radio box x == true
 dann setze feld gleich string bla bla


und das feld setzen eben über globale variable und event

von Wolfgang H. (drahtverhau)


Bewertung
1 lesenswert
nicht lesenswert
Ja. So ähnlich

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
was mir noch fehlt: wie kann ich ein ganz bestimmtes Feld ausfüllen 
lassen?

von Key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin niemand?

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum fuellst du dann nicht einfach das ganz bestimmte Feld?

Weisst du nicht wie man ein Feld fuellt?
Ist es vielleicht doch nicht so ganz bestimmt?

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> Weisst du nicht wie man ein Feld fuellt?

ja das ist mein Problem

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Key (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
key schrieb:
> cppbert schrieb:
>> Weisst du nicht wie man ein Feld fuellt?
>
> ja das ist mein Problem

Und was fuer ein Feld ist das? Ein Edit oder Labelfeld?

Mehr Details bitte -  es gibt tausend Dinge in der Programmiersprache 
die du verwendest die Felder sind und auch x varianten von Tabellen - 
keine Ahnung was du genau machst

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> key schrieb:
>> cppbert schrieb:
>>> Weisst du nicht wie man ein Feld fuellt?
>>
>> ja das ist mein Problem
>
> Und was fuer ein Feld ist das? Ein Edit oder Labelfeld?
>
> Mehr Details bitte -  es gibt tausend Dinge in der Programmiersprache
> die du verwendest die Felder sind und auch x varianten von Tabellen -
> keine Ahnung was du genau machst

data grit view

habe alle spalten auf read only gestellt, d.h. es geht darum, das der 
Bediener automatisiewrt Daten angezeigt bekommt.

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ich möchte die Klasse DataGridViewTextBoxColumn verwenden

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
key schrieb:
> ich möchte die Klasse DataGridViewTextBoxColumn verwenden

das wahrscheinlkich schwachsinn, weil ich ja keine Daten einlesen 
möchte. Sondern nur asugeben

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
also ich bei recherhce gesehen, dass meist eine virtuelle Tabelle 
angelegt wird und damit die grit ausgefüllt wird. hilft mir aber nicht 
weiter

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
2 grundsätzliche Dinge.

1. ) Wieso machst du das so umständlich.  Für eine JA / NEIN Abfrage in 
einer Tabelle reicht es, die Spalte der Tabelle mit einer Checked-Box 
(die mit den Haken) zu versehen.  Das Ergebnis wird als True/False 
abgespeichert.

Ist im Datagridview nur eine richtige Einstellung.

2.) wenn du es unbedingt so machen willst lege 2 Radio-Button an.
Dann einfach beim Speichern die Checked-Eigenschaft abspeichern.
if radio_button_ja.checked = true then schreibe_in_tabelle$ = "ja" else 
schreibe_in_tabelle$ = "nein"

Alternativ :
if radio_button_ja.checked = true then
  datagridview.rows(Zeilen_nr).celles(Zeilen_nr).value = "ja"
else
  datagridview.rows(Zeilen_nr).celles(Zeilen_nr).value ="nein"
end if


Kleiner Hinweis am Rande. Wenn du 2 Radio-buttons mit JA Stellung has, 
must du die in eine Panel (Container) setzen, weil nur EIN Radio-Button 
nach den ersten Klick auf der Form die Checked = True Eigenschaft hat. 
Ein Container ist eine Mini-Form und muss auch so behandelt werden.

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry cells(Spalten_nr) natürlich : Also so ist der Code richtig

Alternativ :
if radio_button_ja.checked = true then
  datagridview.rows(Zeilen_nr).cells(spalten_nr).value = "ja"
else
  datagridview.rows(Zeilen_nr).cells(spalten_nr).value ="nein"
end if

Ich bin die Vorblendung von Variablen gewöhnt, da kommt so was halt vor. 
;)

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nebenhinweis.

Das Datagridview kannst du mit den richtigen Einstellungen so benutzen, 
das man es nicht einmal sieht. Die Anbindung an eine Datenbank ist in 
keinster Weise erforderlich.

Der Unterschied ist nur die Eigenschaft "Datapropertyname" im Entwurf. 
Ist die leer ist das ein normales Gitter. Wenn sie ein Wert hat, muss 
dieser Wert der Name des Feldes sein, mit den du per Befehl das 
Datagridview füllst.

Ich benutze das Datagridview sehr oft, als formatierte Anzeige. Du must 
nur ganz viele Standard-Eigenschaften verstellen. z.b. Header-text = 
false etc.
Nun der Trick. Du musst die Farben auf den Hintergrund deiner Form 
anpassen. Farbe von select_row nicht vergessen, und read_only auf TRUE 
Gitterlinien abschalten, etc.

Dann merkt kein Mensch das da ein Datagridview hinter steckt.

Ist besonders geil, wenn du auf der Form z.B. eine Kalkulation anzeigen 
willst. Einfach die Felder per gitter_ini_sub füllen. Und dann beim der 
Berechnen_sub nur noch die Werte übergeben an die Zelle. Währungssymbole 
und Formatierung macht das Grid für dich. Und es passt auch perfekt im 
Design.

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
so dann? bekomme die Fehlermeldung
Fehler  CS1955  Der nicht aufrufbare Member "DataGridView.Rows" kann 
nicht wie eine Methode verwendet werden.
grtArchivierung.Rows(1).cells(3).value = "Ja";

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
danke für die Tipps. hast du mal ein screenshot vom design?

Schlaumaier schrieb:
> Kleiner Nebenhinweis.

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ein Semikolon dahinter. ??

Dann muss du meine Befehle anpassen. Ich habe die Aussage getroffen, 
weil ich dachte du hast Visual-Basic. In C sind da einige Dinge etwas 
anders.

Ein Screenshot wird dir wenig helfen. Der Trick ist ja, das du das 
Datagridview NICHT siehst.

Aber ich vermute dein Fehler liegt in der Gitter_ini_sub.
Die musst du schreiben mit folgenden VB !!! Befehlen und beim Start 
aufrufen. Ich rufe so was immer im Form-Load Ereignis auf. (Doppelklick 
in die nackte Form reicht).

Sub gitter_ini_sub

anzahl_der_zeilen = 24 ' oder was auch immer :)
Datagridview.Rows.Add(anzahl_der_zeilen)

end sub

Bitte beachte das die linke obere Zeile die Adresse  0, 0 hat.

Wenn das MS ist, dann drück die F1-Taste und such dann Datagridview und 
dann die DataGridViewCell.Value Eigenschaft . Dort ist der Unterschied 
in den Versionen (basic , c#, c++ u.s.w.) beschrieben

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hier ein Teil meine gitter_ini_sub

sub gitter_ini_sub

 gg_summe.BackgroundColor = back_farbe
 gg_summe.Rows.Add(8)
 For i = 0 To 7
   gg_summe.Rows(i).Height = 19
 Next i
 gg_summe.ColumnHeadersVisible = False ' schalte überschrift ab
 gg_summe.CellBorderStyle = DataGridViewCellBorderStyle.None ' schaltet 
gitterlinen ab

 gg_summe.Rows(0).Cells(0).Value = "Listenpreis Abs. 1 :"
 gg_summe.Rows(1).Cells(0).Value = "+ TZ :"
 gg_summe.Rows(2).Cells(0).Value = "- Rabatte :"
 gg_summe.Rows(3).Height = 2 ' fette Trennlinie
 gg_summe.Rows(4).Cells(0).Value = "Endpreis ohne Mwst :"
 gg_summe.Rows(5).Cells(0).Value = "+ " + Str(akt_mwst) + "% Mwst :"
 gg_summe.Rows(6).Height = 2 ' fette Trennlinie
 gg_summe.Rows(7).Cells(0).Value = "Endpreis inkl. Mwst :"


For i = 0 To 7  ' setze die summen_werte auf 0
      gg_summe.Rows(i).Cells(1).Value = 0
      gg_summe.Rows(i).Cells(4).Value = 0

    Next i

'Skalierung des Gitters (ist so einfacher als mit den Eigenschaften
' diese Routine muss nach einen Neuskalieren in der 
form_resize_eigenschaft
auch aufgerufen werden.

    maxi = gg_summe.Width / 100
    gg_summe.Columns(0).Width = maxi * 27
    gg_summe.Columns(1).Width = maxi * 15
    gg_summe.Columns(2).Width = maxi * 18
    gg_summe.Columns(3).Width = maxi * 25
    gg_summe.Columns(4).Width = maxi * 15


  For i = 0 To 4 ' setzt die fette Line schwarz
      If i <> 2 Then
        gg_summe.Rows(3).Cells(i).Style.BackColor = Color.Black
        gg_summe.Rows(6).Cells(i).Style.backColor = Color.Black
        gg_summe.Rows(3).Cells(i).value = ""
        gg_summe.Rows(6).Cells(i).value = ""
      End If
    Next i

'setzt die Standart-Eigenschaften der Farbe wegen Tarnung ;)
    gg_summe.Rows(0).Cells(3).Value = "Listenpreis Angebot :"
    gg_summe.DefaultCellStyle.ForeColor = Color.Black
    gg_summe.DefaultCellStyle.BackColor = back_farbe 'Color.Black
    Me.gg_summe.CurrentCell = Me.gg_summe(1, 0)
    gg_summe.DefaultCellStyle.SelectionBackColor = back_farbe


So nun muss du das ganze nur noch in C umrechnen ;)  Viel Spass

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es geht winforms und c#

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
fein. Freut mich.

Musst halt selbst ein bisschen denken. Aber du hast den richtigen Weg.

Meine VB-Hilfe (MS-Hilfs-Assistent) zeigt mir die Code-Schnipsel der 
Funktion in 4 verschiedene Prg-Sprachen an.

Mein größtes Problem ist nicht etwas zu coden. Sondern den Namen der 
Eigenschaft  des Objekt  der Funktion zu wissen.

Deshalb hab ich dir den Code gezeigt. Ähnliche Ansteuerungen sind 
nämlich in C unter VB zu finden. Ich lese bei der Suche nach einer 
Funktion / Eigenschaft auch die VB.Net + C codes. War schon oft viel 
brauchbares drin.

Die Details machen dich nur wahnsinnig. ;) Ich habe 4 Std. gestern an 
einer einfachen Sinus-Funktionsberechnung gesessen. Bis ich 
herausgefunden habe, das MS den Sinus in Radius nicht wie ich immer in 
GRAD rechnet.

Da beißt du in die Tischkante

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schlaumaier schrieb:
> Mein größtes Problem ist nicht etwas zu coden. Sondern den Namen der
> Eigenschaft  des Objekt  der Funktion zu wissen.

dein Problem ist auch mein Problem!!!!!!!!! haha. Coden ist einfach, 
eknn mich aber nicht mit c# oder Windows forms aus.

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
also wenn noch jemand was brauchbares für c# und Windows forms hat, 
immer her damit

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
es ist doch eine simple Frage: wie kann ich ein einzelnes Feld in einer 
data grit view ansprechen/ deren Wert verändern?

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
key schrieb:
> es ist doch eine simple Frage: wie kann ich ein einzelnes Feld in einer
> data grit view ansprechen/ deren Wert verändern?


Suchbegriff in den Ms-Hilfs-Assistent (Aufruf mit F1-Taste): 
*DataGridView.Rows-Eigenschaft*

Auszug aus der MS-Hilfe.

Im folgenden Beispiel wird veranschaulicht, wie Zellwerte 
programmgesteuert geändert werden.


[Visual Basic]
' Modify the value in the first cell of the second row.
  Me.dataGridView1.Rows[1].Cells[0].Value = "new value"

  ' The previous line is equivalent to the following line.
  Me.dataGridView1[0, 1].Value = "new value"

[C#]

// Modify the value in the first cell of the second row.
  this.dataGridView1.Rows[1].Cells[0].Value = "new value";

  // The previous line is equivalent to the following line.
  this.dataGridView1[0, 1].Value = "new value";


me kann man sich aber sparen. This weiß ich nicht, da C#

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aber das geht nur, wenn du die Zeile vorher angelegt hast. !!!!!

Schlaumaier schrieb:
> anzahl_der_zeilen = 24 ' oder was auch immer :)
> Datagridview.Rows.Add(anzahl_der_zeilen)

da kannst du in Rows(x) x mit den Wert 0 - 23 hinterlegen.

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hat mir geholfen, danke dir

von key (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
eine Frage Dann doch noch:
die erste Spalte zählt wohl garnicht als spalte. Ich date da wäre 
automatische die Zeilenzahl angeben. Wie kann ich das konfigurieren?

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
 this.grtArchivierung.Rows.Add(GlobaleVariablen.TestdurchlaufNr);
habe so versucht, meiner Tabelle spalten hinzuzufügen. Bekomme die 
Fehlermeldung
System.ArgumentOutOfRangeException: "Die Anzahl der zu erstellenden 
Kopien muss immer positiv sein.

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
die Variable müsste den Wert eins haben

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
key schrieb:
> spalten

zeilen

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
setze RowHeadersVisible auf false

Ist eine Eigenschaft in der Eigenschaften-Liste.

Das ist sie weg und das Problem gelöst. Sieht eh Mist aus. ;)

Das ist keine Spalte sondern eine "Navi-Hilfe". Mach sie weg,  und 
navigiere mit ein dezenten Balken ;)

Die genauen Infos darüber sind in der Hilfe.

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kleiner Tipp :

Wenn du nochmal ein Prg. schreibst mit einen Datagridview mache 
folgendes

Starte die IDE 2 x

Lade in IDE-1 dein Prg. mit den Grid
Klicke das Grid an, und dann STRG-C (kopieren)

Wechsel in IDE-2 mit den neuen Prg.

klicke auf die Form wo das Teil hin soll

STRG-V (einfügen).

Dann rechte maus auf das Grid, spalten bearbeiten,  und fertig ist das 
neue Grid im neuen Programm.

ALLE eingestellten (nicht programmierten) Eigenschaften werde durch das 
kopieren mit übernommen.  So vergisst du nicht irgend eine Eigenschaft 
zu ändern ;)

Ich bin faul, und merkte mir keine 100 Eigenschaften von so ein plöden 
Grid.

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du Zeilen-Nr. haben willst, machst du folgendes.

Setzte die erste Spalte fix, und füttere sie mit einer schleife.

For i = 0 to datagridview.Rows.Count - 1
   datagridview.rows(i).cells(0).value = i
next i

datagridview.Rows(0).ReadOnly = True   ' oder in den Eigenschaften der 
Spalte setzen

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
danke, hat alles funktioniert. Jetzt noch die Frage, wie ich zeilen 
hinzufügen kann. Also entsprechend der Laufvariable - 1

von Dirk (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Anstatt hier tausende von Fragen zu stellen, wie wäre es mit einem 
lauffähigen Beipspiel mit der konkreten Frage?


http://csharp.net-informations.com/datagridview/csharp-datagridview-add-column.htm

von Schlaumeier 2 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Anz_neuer_zeilen = 2
DataGridview.rows.add (anzahl_neuer_zeilen)

Das ist alles

von key (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schlaumeier 2 schrieb:
> Anz_neuer_zeilen = 2
> DataGridview.rows.add (anzahl_neuer_zeilen)
>
> Das ist alles

super. jetzt läuft alles. <vielen <dank für Ihre Hilfe Sir. Eine letzte 
Frage: wenn ich hunderte Zeilen in der Tabelle eingefügt habe, wie kann 
ich einstellen, dass immer die zuletzt hinzugefügte Zeile angezeigt 
wird. und nicht die erste, sodass man immer scrollen muss....

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry war im Krankenhaus wegen Herzen :(

Hier des Code-Schnipsel. Beachte die letzte Zeile.

 DataGridView.Rows.Add(100) ' 100 neue Zeilen
    For i = 1 To DataGridView.Rows.Count - 1   ' schleife füllt damit du 
die Zeilen zählen kannst
      DataGridView.Rows(i).Cells(1).Value = i
    Next i
    DataGridView.FirstDisplayedCell = DataGridView.Rows(gg.Rows.Count - 
1).Cells(0)  <- Springt zur ersten ZELLE in Zeile 100 und zeigt die an. 
Die Angabe muss so erfolgen, da du auch nach links/rechts positionieren 
musst/kannst. Bei 50 Spalten merkst du den Vorteil ;)

von Schlaumaier (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry kann nicht editieren.  Kleiner feiner Tippfehler im Code. Hier der 
richtige.


 DataGridView.Rows.Add(100) ' 100 neue Zeilen
    For i = 1 To DataGridView.Rows.Count - 1   ' schleife füllt damit du
die Zeilen zählen kannst
      DataGridView.Rows(i).Cells(1).Value = i
    Next i
    DataGridView.FirstDisplayedCell = 
DataGridView.Rows(DataGridView.Rows.Count -
1).Cells(0)  ' <- Springt zur ersten ZELLE in Zeile 100 und zeigt die 
an.
Die Angabe muss so erfolgen, da du auch nach links/rechts positionieren
musst/kannst. Bei 50 Spalten merkst du den Vorteil ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.