C# anfängerfragen

Jackybroun

Newbie
Registriert
Mai 2013
Beiträge
7
Hi, ich versuche grade ein auswertungsprogram für das Roulettspiel zu Programieren.

alles schön und gut läuft soweit auch alles nur jetzt hätte ich ein paar fragen zu ein paar extras

1stens:
Ich hätte gerne ein Tool wodrinne ich die eingegebenen Zahlen nach jedem Button_click nach unten schiebe bis sie raus laufen

Bsp.:
1
5
7
34
12
usw.

man kann in der textbox multiple lines aktivieren, muss ich hier aber dann nicht ein Array anlegen, welches ich da ausgebe und wie sieht das Prgramiertechnisch aus?

die 2tens:
Ich gebe jeweils Rote zahlen mit einem Button ein Schwarze Zahlen mit einem anderen. Besteh die möglichkeit je nach Buttomklick die Zahl Farblich Rot oder Schwarz erscheinen zu lassen und vilt auch als FETT?

liebe grüße und großen dank im vorraus =)
 
Jackybroun schrieb:
Ich hätte gerne ein Tool wodrinne ich die eingegebenen Zahlen nach jedem Button_click nach unten schiebe bis sie raus laufen
Nimm ne ListBox und hau alle Elemente > x raus.
Jackybroun schrieb:
Ich gebe jeweils Rote zahlen mit einem Button ein Schwarze Zahlen mit einem anderen. Besteh die möglichkeit je nach Buttomklick die Zahl Farblich Rot oder Schwarz erscheinen zu lassen und vilt auch als FETT?
Du kannst die Einträge der ListBox auch selbst zeichnen, also auch rot/schwarz/fett machen.
 
Hi,

erstmal danke =)

ich bekomm es irgendwie nicht hin. Auf die Idee mit der Listbox bin ich auch schon gekommen, aber es harpert einfach an den Befehlen.

also:

ischwarz = Convert.ToInt32(textBox1.Text); // Zahl die über den Button eingegeben wurde auf ischwarz

contents = Convert.ToString(ischwarz); //ZurückKonvertieren da ich sie noch für Int Spiele brauche
listBox1.Items.Add(contents); //ich hole sie in die Listbox

mein Problem ist die letzte Zahl soll immer den Index[0] haben, also anders herum als normal und ich weiß nciht wie das möglich ist.

Und wie ich sie Zeichnen kann wenn ich einen Button drücke versteh ich schon garnicht :D. Ich gebe wie gesagt die Zahl wenn sie rot ist über dne Button Rot ein und wenn sie schwarz ist, wird sie über den Button Schwarz eingegeben und je nachdme hätte ich sie gerne in der ListBox als Rot oder Schwarz gezeichnet.

liebe grüße
Ergänzung ()

Hi,

also die lösung für meine rstes Problem ist:

listBox1.Items.Insert(0,contents);

bleibt noch das problem mit dne Farben ^^
Ergänzung ()

Und das klappt mit:

listBox1.ForeColor = Color.Gray;

ich meld mich dann wenn ich wieder fragen habe :D
Ergänzung ()

Hallo zusammen,

also jetzt habe ich nur noch ein Problem. Ich möchte das die EIngaben unterschiedlich gefärbt sind. Soll heißenn wenn ich 3 eingaben mit dem schwarzen button mache sollen alle 3 schwarz sein. Wenn ich die 4te Eingabe mit dem Roten Button mache, soll diese Eingabe Rot sein und die anderen Schwarz bleiben.


private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Brush myBrush = Brushes.Black;

if (afrot == 0)
{
myBrush = Brushes.Red;
}
else
{
myBrush = Brushes.Black;
}
e.Graphics.DrawString(listBox1.Items[???].ToString(???), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
}

den Wert habe ich auf der Variablen "eingabe"

jetzt weiß ich aber nicht wie ich das am laufen bekomme.
 
Sieh dir mal das Beispiel auf MSDN an.

Das Farbproblem liegt bei dir wohl daran, dass afrot wahrscheinlich eine Instanzvariable ist. Woher soll nun jede einzelne Zeile wissen, welche Farbe sie hat? Die musst du wenn schon zum Objekt der Liste selbst hinzufügen. Wie du diese nun speicherst und später identifizierst, ist dir überlassen. Am Einfachsten wäre es natürlich, wenn du es einfach in einen Container packst und dieses der Liste hinzufügst (ListBox.Items ist ja eine ObjectCollection, also kann dort so gut wie alles hinein).
Code:
using System.Drawing;

public class ColorContainer
{
	public Color Farbe { get; set; }
	public string Wert { get; set; }
	
	public ColorContainer( string Wert, Color Farbe )
	{
		this.Wert = Wert;
		this.Farbe = Farbe;
	}
	
	public override string ToString() { return Wert; }
}
Damit hast du dann Wert und Farbe zusammen gespeichert und kannst im DrawItem-Callback darauf zugreifen.
Code:
// beim Hinzufügen
Color f = Color.Red;
string w = "50";
listbox1.Items.Add( new ColorContainer( w, f ) );


// Callback
private void listBox1_DrawItem( object sender, DrawItemEventArgs e )
{
	object o = listbox1.Items[e.Index];
	Color c = Color.Black;
	if( o is ColorContainer )
		c = (o as ColorContainer).Farbe;
	
	e.Graphics.DrawString( o.ToString(), e.Font, new SolidColorBrush( c ), e.Bounds );
}
Ungetestet natürlich.
 
Hi,

ich habe es jetzt genau so getestet. Leider bekomme ich wenn ich Kompelieren will 2 fehler die ich nicht genau verstehe.

Fehler 1 "Roulett.Unterordner.EinfachesSpielForm" enthält keine Definition für "textBox1_TextChanged", und es konnte keine Erweiterungsmethode "textBox1_TextChanged" gefunden werden, die ein erstes Argument vom Typ "Roulett.Unterordner.EinfachesSpielForm" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Jackybroun\documents\visual studio 2010\Projects\ProRoulett\ProRoulett\Unterordner\EinfachesSpielForm.Designer.cs 62 71 ProRoulett

Fehler 2 "Roulett.Unterordner.EinfachesSpielForm" enthält keine Definition für "label1_Click", und es konnte keine Erweiterungsmethode "label1_Click" gefunden werden, die ein erstes Argument vom Typ "Roulett.Unterordner.EinfachesSpielForm" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Jackybroun\documents\visual studio 2010\Projects\ProRoulett\ProRoulett\Unterordner\EinfachesSpielForm.Designer.cs 73 63 ProRoulett

Wenn ich ihm jetzt die Methoden generieren lasse:

public System.EventHandler textBox1_TextChanged { get; set; }

public System.EventHandler label1_Click { get; set; }

bekomme ich folgenden Fehler:

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

--> Der Delegat einer Instanzenmethode kann kein "this" von NULL haben.
 
Dann wirst du wohl den Feldern ein Event zugeordnet und diese später gelöscht haben. Klick doppelt auf den Fehler und entfern die Deklaration. Dann passts.
 
Du hast es echt drauf :)

vielen dank klappt alles wunderbar

Liebe grüße und n schönen Nachmittag/Abend noch, ich kann jetzt fleißig weiter machen =)
Ergänzung ()

Hi zusammen,

ich habe mein Program jetzt fertig und das ohne fehler, laut Debugger. Wenn ich aber jetzt die Anwenung erstelle bekomme ich beim starten folgende Fehlermeldung. Kann mir jemand sagen wie ich da sin den Griff bekommen kann?


************** Ausnahmetext **************
System.ArgumentOutOfRangeException: InvalidArgument=Value mit dem Wert -1 ist für index ungültig.
Parametername: index
bei System.Windows.Forms.ListBox.ObjectCollection.get_Item(Int32 index)
bei Roulett.Unterordner.EinfachesSpielForm.listBox1_DrawItem(Object sender, DrawItemEventArgs e)
bei System.Windows.Forms.ListBox.OnDrawItem(DrawItemEventArgs e)
bei System.Windows.Forms.ListBox.WmReflectDrawItem(Message& m)
bei System.Windows.Forms.ListBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

liebe grüße
 
Dann musst du vorher noch ne Bereichsüberprüfung durchführen.
Code:
// Callback
private void listBox1_DrawItem( object sender, DrawItemEventArgs e )
{
	if( e.Index > 0 && e.Index < listbox1.Items.Count )
	{
		object o = listbox1.Items[e.Index];
		Color c = Color.Black;
		if( o is ColorContainer )
			c = (o as ColorContainer).Farbe;
		
		e.Graphics.DrawString( o.ToString(), e.Font, new SolidColorBrush( c ), e.Bounds );
	}
}
 
Wow danke jetzt klappt es, nur jetzt wird [Index 0] nicht mehr angezeigt :)

schon mal danke im vorraus :p
 
Achso ja klar, >= 0 oder > -1 wäre natürlich korrekt. ;)
 
Da bin ich wieder. Also jetzt habe ich das Problem das ich die Werte aus den Comboboxen gerne nach Excel exportieren möchte.

Dazu habe ich auch einiges bei google gefunden. Ich hab als erstes einen Verweis auf Microsoft Office Object Library hinzugefügt. Aber wenn ich jetzt Excel.App.... hinzufügren will erkennt er die nicht. Kann mir einer sagen woran das liegt? Muss ich bei den usings. irgendwas hinzufügen?

liebe grüße
Ergänzung ()

Und dann noch gleich ne Frage hinterher. Wenn ich jetzt kleine Popups zum anklicken erstellen will mit Bilder als auch Informationen, mit welchem tool amche ich das am besten. Ich dachte erst das ich dann ne neue Form aufrufe, aber dazu hatte ich gelesen das es auch zimlich kompliziert sein soll, werte aus einer Form in einer anderen zu übernehmen?
 
Ich nutze NPOI für sowas. Ist einfach zu benutzen und es gibt ne menge Beispiele.

Was meinst du mit "kleine Popups zum anklicken"? Dialog-Boxen?
 
Zum 2. Teil: Du machst dir einfach ne Form mit einem MS Chart, füllst es mit Daten und zeigst es danach an. Kannst du natürlich auch mit Bildern, Text, etc. machen. Da würde ich an deiner Stelle aber das Formular dynamisch anlegen, da es sinnlos wäre ein Formular extra dafür zu hinterlegen.

Zum Beispiel so:
Code:
private void button4_Click( object sender, EventArgs e )
{
	Form f = new Form();
	f.Size = new System.Drawing.Size( 640, 480 );
	f.Text = "test form";
	f.StartPosition = FormStartPosition.CenterParent;
	f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
	f.MaximizeBox = f.MinimizeBox = false;
	f.KeyPreview = true;

	f.KeyDown += new KeyEventHandler( ( object kds, KeyEventArgs ke ) =>
	{
		if( ke.KeyCode == Keys.Escape )
			f.Close();
	} );

	Label l = new Label();
	l.Text = "test label";
	l.Location = new System.Drawing.Point( 320, 240 );
	l.Parent = f;

	f.Controls.Add( l );

	f.ShowDialog();
}
Den ganzen Code kannst du dir aber auch in deiner Form selbst ansehen. Visual Studio macht beim Erstellen mit den Controls via GUI ja nichts anderes, als obigen Code selbst zu hinterlegen.
 
Danke erstmal.

Zu dem NPOI finde kaum irgendwas verwertbares. Kann man mir da mal ein Beispiel zu den NPOI geben oder zu den EXCEL.Libarys. Ich will ja nur ein paar überschriften Horizontal eintragen und die dann vertikal mit Werten füllen die in Comboboxen stehen.

liebe grüße
Ergänzung ()

Und was ist daran falsch?

Code:
private void button3_Click(object sender, EventArgs e)
        {
            Form f = new Form();
            f.Size = new System.Drawing.Size(400, 400);
            f.Text = "test form";
            f.StartPosition = FormStartPosition.CenterParent;
            f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            f.MaximizeBox = f.MinimizeBox = false;
            f.KeyPreview = true;

            f.KeyDown += new KeyEventHandler((object kds, KeyEventArgs ke) =>
            {
                if (ke.KeyCode == Keys.Escape)
                    f.Close();
            });

            //Label l = new Label();
            //l.Text = "test label";
            //l.Location = new System.Drawing.Point(320, 240);
            //l.Parent = f;

            //f.Controls.Add(l);

            //f.ShowDialog();

            PictureBox imageControl = new PictureBox();
            imageControl.Width = 400;
            imageControl.Height = 400;

            Controls.Add(imageControl);

            DisplayImage();


        }

        private void DisplayImage()
        {

            PictureBox imageControl = new PictureBox();

            imageControl.Width = 400;

            imageControl.Height = 400;



            Bitmap image = new Bitmap("C:\\Users\\Jackybroun\\Pictures\\European.png");

            imageControl.Dock = DockStyle.Fill;

            imageControl.Image = (Image)image;



            Controls.Add(imageControl);

        }
 
Du hast diese Zeile:

Code:
f.Controls.Add(l);

mit dieser ersetzt:

Code:
Controls.Add(l);

Damit wird das Control nicht der Collection von f (Form f = new Form(); ) hinzugefügt sondern vermutlich dem Formular in dem du diese Methode geschrieben hast.
Weiters hast du nun eine weitere Methode geschrieben DisplayImage(); die versucht ein zweites ImageControl hinzuzufügen dass an der selbe Stelle stehen würde und somit überlappend wäre.

Weiters hast du die Zeile

Code:
//f.ShowDialog();

auskommentiert, dadurch wird es nie angezeigt.
 
Zuletzt bearbeitet:
Du brauchst dieses Paket: "NPOI 1.2.5 binary and examples"
"examples" ist englisch und bedeutet "Beispiele". Da sollten alle gängigen Szenarien erklärt sein.

Mit EXCEL.Librarys kenne ich mich nicht aus.
 
Zurück
Oben