Gtk# und C# - Datenaustausch zwischen Fenster und Dialogen

gthzer

Grünschnabel
Hallo,

versuche ich es noch mal allgemeiner.

Hat irgendwer einen Tip, wie ich den Datenaustausch zwischen einem Fenster und einem Dialog in C# mittels Gtk# realisieren kann?

Vielleicht reicht auch ein Hinweis auf einen kleines überschaubaren Prog, welches dies erledigt.

Ich probier da schon seit tagen rum und befindet mich offensichtlich auf dem falschen Weg. Aber ich bin mittlerweile zu vernagelt herauszufinden, was ich den falsch mache.

Vielen Dank
Thorsten
 
Hallo,

hier müsstest du viele Infos zu dem Thema kriegen: GtkSharp-Tutorials
Hier sind noch einige Anwendungen aufgelistet, in denen Gtk# verwendet wurde: GtkSharp
Wenn es net weiter hilft, dann melde dich einfach wieder.


Gruß Konstantin
 
Zuletzt bearbeitet von einem Moderator:
Hallo Konstantin,

das hilft mir leider nicht weiter. Das hab ich bereits alles durchgearbeitet, aber meine Frage wird darin nicht geklärt. Eigentlich kann es sicherlich nicht so kompliziert sein. Aber ich bin irgendwie einfach auf einem komplett falschen Weg unterwegs und zu eingefahren, als das ich das Problem erkenne.

Vielleicht hat hier wer mal ein kleines Beispiel parat.

Beste Grüße
Thorsten
 
Beispiel für den Datenaustausch zwischen Gtk.Window und Gtk.Dialog [GtkSharp]

Hallo,

ich habe hier ein Beispiel für den Datenaustausch zwischen 2 Gtk.Window(s) und einem Gtk.Dialog (Gtk.MessageDialog).
Folgendes GtkSharp-Paket(Version 2.8) habe ich installiert: Gtk# Win32 Installer for Microsoft .NET Framework 1.1
Für mein Beispiel habe ich zusätzlich folgende Assemblies eingebunden:
- art-sharp
- glade-sharp
- glib-sharp
- gtk-sharp
bei allen 4 Verweisen habe ich das Property "Spezifische Version" auf FALSE gesetzt.

C#:
using System;
using System.Collections.Generic;
using System.Text;
using Gtk;

namespace GtkSharpExample
{
    /// <author>konstantin.denerz</author>
    class Program
    {

        static void Main(string[] args)
        {
            Gtk.Application.Init();
            // create the output window
            Window outputWindow = new Window("Output");
            outputWindow.Add(new Label());
            outputWindow.Resize(350, 80);
            // create the input window
            MyWindow window = new MyWindow("Window", outputWindow);
            window.ShowAll();
            outputWindow.ShowAll();
            Gtk.Application.Run();
        }


    }

    class MyWindow : Window
    {
        Window outputWindow;
        Entry entry;
        Button button;
       
        public MyWindow(string aTitle, Window anOutputWindow)
            : base(aTitle)
        {
            this.outputWindow = anOutputWindow;

            #region Designer ....
            // container for text box and button
            HBox box = new HBox();
            // text box
            entry = new Entry("Put your message here ...");
            button = new Button("Send");
            // added handler for clicked event
            button.Clicked += new EventHandler(button_Clicked);
            box.Add(entry);
            box.Add(button);
            this.Add(box);
            this.Resize(350, 80);
            #endregion
        }

        void button_Clicked(object sender, EventArgs e)
        {
            MessageDialog dialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Question, ButtonsType.YesNo, "Send text?");
            // show dialog
            int dialogResult = dialog.Run();
            // -8 == Yes, -9 == No
            if (dialogResult == -8)
            {
                // set the input in the output window
                (outputWindow.Children[0] as Label).Text = entry.Text;
            }

            dialog.Destroy();
        }

    }

}

Hoffe das hilft dir weiter!

Gruß Konstantin
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Konstantin, dank dir für deine Mühe.

Das ist zwar noch nicht so ganz die Lösung für mein Problem, aber es bringt mich weiter.

Du löst das alles in einer Klasse. Mein Problem besteht darin, das ich durch Button-Klick einen Dialog öffnen möchte, der dann ein Entry enthält, welches nach dem Abschicken durch das erste Fenster an eine Telnet-Verbindung geschickt werden soll.

Das heißt ich muss das erste Fenster durch einen Event darauf hinweisen, dass er neue Daten hat, die er verschicken kann. Da war meine Frage wohl ein wenig zu unpräzise.

Hast du eine Idee, wie ich das Event-Problem im mit dem ersten Fenster lösen kann. Oder wie ich einen Event im ersten durch das zweite Fenster auslöse.

Vielen Dank
 
Das verstehe ich nicht ganz.

Du hast ein Fenster(z.B. MainWindow), das einen Button enthält. Du klickst auf den Button und es kommt ein neues Fenster(Window > Dialog > InputDialog). In dem Dialog(z.B. Input) machst du deine Eingaben und klickst auf einen Ok-Button. Dann wird deine Eingabe an das Fenster(MainWindow) aus dem du den Dialog(Input) aufgerufen hast zurückgeschickt und dieses Fenster (MainWindow) führt dann eine Methode aus?

Gruß Konstantin
 
Mein Problem ist, dass ich das MainWindow ja darüber informieren muss, dass das andere Fenster einen Event ausgeführt hat. Die Daten kann ich ja über das Event in das MainWindow überführen. Aber das MainWindow soll diese Daten dann auch aktuell verarbeiten und versenden.

Vielleicht hab ich mich aber auch einfach völlig verrannt und seh die lösung nicht mehr.
 
Das müsste doch genau das machen was du willst:
Gelöst über das Event-Handling von .NET.

C#:
using System;
using System.Collections.Generic;
using System.Text;

namespace GtkSharpExample2
{
    class Program
    {
        static void Main(string[] args)
        {
            Gtk.Application.Init();
            new MainWindow("MainWindow").ShowAll();
            Gtk.Application.Run();
        }
    }
    
    class MainWindow : Gtk.Window
    {
        public MainWindow(string aTitle) : base(aTitle)
        {
            Gtk.HBox box = new Gtk.HBox();
            Gtk.Button button = new Gtk.Button("Click");
            button.Clicked += new EventHandler(button_Clicked);
            box.Add(button);
            this.Add(box);
            this.Resize(200, 50);
        }

        void button_Clicked(object sender, EventArgs e)
        {
            Input input = new Input("Input Window");
            input.Update += new Input.UpdateHandler(input_Update);
            input.ShowAll();
        }

        void input_Update(string aMessage)
        {
            Console.WriteLine("send data["+aMessage+"] to ....");
        }
    }

    class Input : Gtk.Window
    {
        public delegate void UpdateHandler(string aMessage);
        public event UpdateHandler Update;
        Gtk.Entry entry;

        public Input(string aTitle)
            : base(aTitle)
        {
            Gtk.VBox box = new Gtk.VBox();
            entry = new Gtk.Entry();
            Gtk.Button button = new Gtk.Button("Send ...");
            button.Clicked += new EventHandler(button_Clicked);
            box.Add(entry);
            box.Add(button);
            this.Add(box);
            this.Resize(200, 50);
        }

        void button_Clicked(object sender, EventArgs e)
        {
            Update(entry.Text);
            this.Destroy();
        }
    }
}

Gruß Konstantin
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank dir,

vielleicht sollte mensch sich einfach nicht mit einer Magen-Darm-Grippe vor den Rechner setzen. ;-)

Gruß
Thorsten
 

Neue Beiträge

Zurück