Combobox-Index an variable übergeben

Dieses Thema im Forum "C/C++" wurde erstellt von Nemesis, 25.05.2006.

  1. #1 Nemesis, 25.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hi,
    ich weiss nicht, ob hier auch C# reingehört, wenn nicht, bitte einfach verschieben.

    Aufgabenstellung:
    Eine GUI, die Lotto-Reihen erstellt.
    Man soll auswählen können wieviel Reihen man erstellt haben möchte.

    Momentaner stand:
    ich habe ein neues Projekt gestartet, welches die 3 files:
    • Assamblyinfo.cs
    • Main.cs
    • MainWindow.cs enthält
    dann habe ich in MainWindow.cs im designer ein MainWindow erstellt mit einer Combobox, einem Button und einem Text View.

    Main.cs:
    Code:
    using System;
    using Gtk;
    
    	class MainClass
    	{
    		public static void Main (string[] args)
    		{
    			Application.Init ();
    			MainWindow win = new MainWindow ();
    			win.Show ();
    			Application.Run ();
    		}
    	}
    
    	class lotto
    	{
    		public static void lottozahlen ()
    		{
    			int i, j, l, x;
    			x = Convert.ToInt16(???);	// Combobox-Inhalt an variable x übergeben
    			
    			
    			int[] lotto = new int[6];
    			bool neueZahl;
    			
    			System.Random RandNum = new System.Random();
    			
    			for (l=0; l<x; l++)		// erstellt anzahl der gewünschten reihen
    			{
    				for (i=0; i<6; i++)		//zieht nacheinander 6 zufallszahlen
    				{
    					do		//wiederholt ziehungen so lange bis zahlen unterschiedlich sind
    					{
    						lotto[i] = RandNum.Next(49);	// zahl zwischen 1 und 49 erstellen
    						neueZahl = false;
    						for (j=0; j<i; j++)		//alle bislang gezogenen zahlen durchlaufen
    						{
    							if (lotto[j] == lotto[i])		// doppelte zahlen erkennen
    							{
    								neueZahl = true;
    							}
    						}
    					}
    					while (neueZahl);
    				}
    				Array.Sort(lotto);		//zahlen im Array der grösse nach sortieren
    	
    										// zahlen in feld ausgeben
    			}
    		
    		}
    		
    	}
    		
    MainWindow.cs:
    Code:
    using System;
    using Gtk;
    
    public class MainWindow: Gtk.Window
    {
    	protected Gtk.ComboBox combobox;
    	protected Gtk.TextView textview;
    	protected Gtk.Button button;
    
    	
    	public MainWindow (): base ("")
    	{
    		Stetic.Gui.Build (this, typeof(MainWindow));
    	}
    	
    	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    	{
    		Application.Quit ();
    		a.RetVal = true;
    	}
    }
    
    
    aber wie kann ich jetzt in der Main.cs die auswahl der combobox abgreifen, um dann die gewünschte anzahl von reihen in dem Text View auszugeben?

    Monodoc ist da recht spährlich, eigentlich nicht zu gebrauchen. und in google finde ich da auch nichts wirklich brauchbares.

    ich sag schonmal danke
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Mµ*e^13.5_?¿, 26.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    main.cs:
    Code:
    using System;
    using Gtk;
    
    
    	class MainClass
    	{
    		public static void Main (string[] args)
    		{
    			Application.Init ();
    			MainWindow win = new MainWindow ();
    			win.Show ();
    			Application.Run ();
    		}
    	}
    MainWindow.cs:
    Code:
    using System;
    using Gtk;
    
    public class MainWindow: Gtk.Window
    {
    	protected Gtk.TextView textview;
    	protected Gtk.Button button;
    	protected Gtk.ComboBox combobox;
    	
    	public MainWindow (): base ("")
    	{
    		Stetic.Gui.Build (this, typeof(MainWindow));
    	}
    	
    	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    	{
    		Application.Quit ();
    		a.RetVal = true;
    	}
    
    	protected virtual void lotto(object sender, System.EventArgs e)
    	{
    		int i, j, l, x;
    		x = Convert.ToInt16 (combobox.ActiveText);
    		
    		int[] lotto = new int[6];
    		bool neueZahl;
    		
    		System.Random RandNum = new System.Random ();
    		for (l=0; l<x; l++)		// erstellt anzahl der gewünschten reihen
    		{
    			for (i=0; i<6; i++)		//zieht nacheinander 6 zufallszahlen
    			{
    				do		//wiederholt ziehungen so lange bis zahlen unterschiedlich sind
    				{
    					lotto[i] = RandNum.Next(49);	// zahl zwischen 1 und 49 erstellen
    					neueZahl = false;
    					for (j=0; j<i; j++)		//alle bislang gezogenen zahlen durchlaufen
    					{
    						if (lotto[j] == lotto[i])		// doppelte zahlen erkennen
    						{
    							neueZahl = true;
    						}
    					}
    				}
    				while (neueZahl);
    			}
    			Array.Sort(lotto);		//zahlen im Array der grösse nach sortieren
    			// zahlen in feld ausgeben
    			textview.Buffer.Clear ();
    			for (i=0; i<6; i++)
    			{
    				textview.Buffer.InsertAtCursor (" "+ lotto[i]);
    			}
    			textview.Buffer.InsertAtCursor ("\n");
    		}
    	}
    }
    Die Methode lotto ist dabei mit dem Clicked-Signal von dem button verknüpft.
    Funktioniert sogar :)
     
  4. #3 Nemesis, 26.05.2006
    Zuletzt bearbeitet: 26.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hm, ok, jetzt funktionierts :)
    aber, was muss ich da wie und warum machen, dass es so funktioniert?
    warum erstellt monodevelop die beiden dateien nicht gleich so, dass es passt?
    oder habe ich den code nur in die falsche datei geschrieben?

    edit:

    hm, ne bei mir tuts doch net, aber fehler gibt er auch keinen aus.

    "textview.Buffer.InsertAtCursor" gibt die Zahlen im feld "textview" dort aus, wo der cursor steht?
    kann es daran liegen, dass ich dem button in mono noch beim event clicked etwas zuweisen muss?
     
  5. #4 Mµ*e^13.5_?¿, 26.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Man kann es bestimmt auch anders machen, aber so halte ich es für die bessere Art und Weise.


    Ja, und da das Textfeld vorher mit "textview.Buffer.Clear ()" gelöscht wird, ist das Immer am Anfang.
    Ja, musst du, genau wie ich geschrieben hab:
     
  6. #5 Nemesis, 26.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    dann sagt das aus, dass wenn der button geclickt wird, diese methode ausgeführt werden soll?
    Code:
    protected virtual void lotto([B]object sender, System.EventArgs e[/B])
    aber was muss ich da jetzt dem button noch mitgeben?


    thx
     
  7. #6 Mµ*e^13.5_?¿, 26.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Du musst das einfach nur im gui-Designer mit dem Clicked-Signal verknüpfen.

    [​IMG]
     
  8. #7 Nemesis, 26.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    achso "nur" lotto, ich hatte lotto()
    jetzt tuts :)
    aber wenn man "textview.Buffer.Clear ();" nach jeder ziehung von 6 zahlen ausführt, löscht er die vorherigen 6 und zeigt somit immer nur eine reihe an ;)
    also habe ich es nach der initialisierung von rand gepackt, dann löscht er das textfeld nur zu beginn einmal :)

    so, weiter gehts ;) ...
     
  9. #8 Mµ*e^13.5_?¿, 26.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Ups, ja, ist klar. Mein Fehler.
    War schon etwas spät :O
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 Nemesis, 26.05.2006
    Zuletzt bearbeitet: 27.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    macht nix, ich sollte ja auch noch was denken ;)

    edit:

    hm, wie ist das wenn ich ne gui aus glade einbinden möchte?
    wenn ich ein glade projekt aufmache, dann habe ich nr die main.cs, keine MainWindow.cs, und in der habe ich jetzt stehen:

    Code:
    using System;
    using Gtk;
    using Glade;
    
    public class GladeApp
    {
    	public static void Main (string[] args)
    	{
    		new GladeApp (args);
    	}
    
    	public GladeApp (string[] args) 
    	{
    		Application.Init ();
    
    		Glade.XML gxml = new Glade.XML ("gui.glade", "window1",  null);
    		gxml.Autoconnect (this);
    		Application.Run ();
    	}
    
    	// Connect the Signals defined in Glade
    	private void on_window1_delete_event (object sender, DeleteEventArgs a) 
    	{
    		Application.Quit ();
    		a.RetVal = true;
    	}
    	
    	protected virtual void ziehung(object sender, System.EventArgs e)
    	{
    		int i, j, l, x;
    		x = Convert.ToInt16 (combobox.ActiveText);
    		
    		int[] lotto = new int[6];
    		bool neueZahl;
    		
    		System.Random RandNum = new System.Random ();
    		textview.Buffer.Clear ();
    		for (l=0; l<x; l++)		// erstellt anzahl der gewünschten reihen
    		{
    			for (i=0; i<6; i++)		//zieht nacheinander 6 zufallszahlen
    			{
    				do		//wiederholt ziehungen so lange bis zahlen unterschiedlich sind
    				{
    					lotto[i] = RandNum.Next(49)+1;	// zahl zwischen 1 und 49 erstellen
    					neueZahl = false;
    					for (j=0; j<i; j++)		//alle bislang gezogenen zahlen durchlaufen
    					{
    						if (lotto[j] == lotto[i])		// doppelte zahlen erkennen
    						{
    							neueZahl = true;
    						}
    					}
    				}
    				while (neueZahl);
    			}
    			Array.Sort(lotto);		//zahlen im Array der grösse nach sortieren
    									
    			//textview.Buffer.Clear ();
    			for (i=0; i<6; i++)
    			{
    				textview.Buffer.InsertAtCursor (" "+ lotto[i] +"\n");
    			}
    			textview.Buffer.InsertAtCursor ("\n");
    		}
    	}
    }
    im glade projekt habe ich den button, die combobox und das textview angelegt, und diesen auch im feld "Name" den namen gegeben, des weiteren habe ich beim button unter "signale" ein signal "clicked" angelegt und unter "objekt" habe ich "ziehung" eingeragen. die .gui datei habe ich in das bin/Debug/ verzeichnis meines mono-projektes gepackt.
    wenn ich das programm jetzt starte, dann bringt er aber folgenen fehler:
    Code:
    Unhandled Exception: Glade.HandlerNotFoundException: No handler on_button_clicked found for signal clicked
    in <0x002fb> SignalConnector:ConnectFunc (intptr,intptr,intptr,intptr,intptr,int,intptr)
    in <0x0004b> (wrapper native-to-managed) SignalConnector:ConnectFunc (intptr,intptr,intptr,intptr,intptr,int,intptr)
    in (unmanaged) 0xb6928cbb
    in <0x00004> (wrapper managed-to-native) SignalConnector:glade_xml_signal_autoconnect_full (intptr,Glade.XML/SignalConnector/RawXMLConnectFunc,intptr)
    in <0x00056> SignalConnector:Autoconnect ()
    in <0x00040> Glade.XML:Autoconnect (object)
    in <0x0003a> GladeApp:.ctor (string[])
    in <0x00019> GladeApp:Main (string[])
    
    was habe ich da noch falsch gemacht?

    edit:

    und schon wieder ein schritt weiter, wenn ich es nun starte in der console, dann sagt er:
    Code:
    nemesis@nemesis-mobil:~/Projects/lotto_glade/bin/Debug$ ./lotto_glade.exe
    
    (./lotto_glade.exe:6032): libglade-CRITICAL **: glade_xml_build_interface: assertion `wid != NULL' failed
    
    
    wenn ich es in mono laufen lasse, dann sagt er:
    The name combobox does not exist in the context of 'GladeApp'
    The name textview does not exist in the context of 'GladeApp'

    naja, 'combobox' heisst die combobox in der die anzahl reihen ausgewhlt werden und 'textview' heisst das feld in dem das ergebnis ausgegeben wird.
    beides in der gui.glade vorhanden.

    ma noch der code der app, wie sie momentan ist:
    Code:
    using System;
    using Gtk;
    using Glade;
    
    class GladeApp
    {
    	public static void Main(string[] args)
    	{
    		new GladeApp (args);
    	}
    
    	public GladeApp (string[] args) 
    	{
    		Application.Init ();
    
    		Glade.XML gxml = new Glade.XML ("gui.glade", "MainWindow",  null);
    		gxml.Autoconnect (this);
    		Application.Run ();
    	}
    
    	// Connect the Signals defined in Glade
    	private void on_MainWindow_delete_event (object sender, DeleteEventArgs a) 
    	{
    		Application.Quit ();
    		a.RetVal = true;
    	}
    	
    	protected virtual void ziehung(object sender, System.EventArgs e)
    	{
    		int i, j, l, x;
    		x = Convert.ToInt16 (combobox.ActiveText);
    		
    		int[] lotto = new int[6];
    		bool neueZahl;
    		
    		System.Random RandNum = new System.Random ();
    		textview.Buffer.Clear ();
    		for (l=0; l<x; l++)		// erstellt anzahl der gewünschten reihen
    		{
    			for (i=0; i<6; i++)		//zieht nacheinander 6 zufallszahlen
    			{
    				do		//wiederholt ziehungen so lange bis zahlen unterschiedlich sind
    				{
    					lotto[i] = RandNum.Next(49)+1;	// zahl zwischen 1 und 49 erstellen
    					neueZahl = false;
    					for (j=0; j<i; j++)		//alle bislang gezogenen zahlen durchlaufen
    					{
    						if (lotto[j] == lotto[i])		// doppelte zahlen erkennen
    						{
    							neueZahl = true;
    						}
    					}
    				}
    				while (neueZahl);
    			}
    			Array.Sort(lotto);		//zahlen im Array der grösse nach sortieren
    									
    			for (i=0; i<6; i++)
    			{
    				textview.Buffer.InsertAtCursor (" "+ lotto[i] +"\n");
    			}
    			textview.Buffer.InsertAtCursor ("\n");
    		}
    	}
    }
    
    thx
     
  12. #10 Mµ*e^13.5_?¿, 31.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Tut mir verdammt leid, dass ich erst so spät antworte, ich hab die pn übersehen.

    Du musst die entsprechenden Widgets innerhalb von der Klasse GladeApp deklarieren.
    Du musst also innerhalb von GladeApp folgende Zeilen einfügen:
    Code:
    [Widget] Gtk.TextView textview;
    [Widget] Gtk.ComboBox combobox;
     
Thema:

Combobox-Index an variable übergeben

Die Seite wird geladen...

Combobox-Index an variable übergeben - Ähnliche Themen

  1. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  2. Wie komme ich an den Inhalt des Inhalts einer Variable?

    Wie komme ich an den Inhalt des Inhalts einer Variable?: Hallo Zusammen, ich möchte meine Buildumgebung vereinfachen und besser zu automatisieren. Ein Skript schreibt Pfade in die env und diese...
  3. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  4. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  5. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...