C#/WPF/ Button mit einer Textbox verbinden. Bitte Helft mir.

x1xJanikx1x

Mitglied
Erstmal einen wunderschönen guten Tag,

ich soll im Rahmen meines Praktikums eine WPF-Anwendung machen die folgendes "kann".

Es soll ein Button sein und eine TextBox und immer wenn man auf den Button klickt soll in der
TextBox das Aktuelle Datum und die Uhrzeit angezeigt werden.

Als Befehle für das Datum und die Uhrzeit habe ich folgende genommen:
Code:
 DateTime now = DateTime.Now;
            string currentDate = now.ToLongDateString();
            string currentTime = now.ToLongTimeString();

Dieser Funktioniert in der Consolenausgabe auch problemlos.

Wie ich einen Button und eine TextBox erstelle habe ich bereit rausgefunden.

Bitte sagt mir jetzt wie ich die Aufgabe umsetzen kann.

LG Janik

P.S. Ich hoffe ich bin hier im Forum richtig ist nämlich mein erster Beitrag
 
http://msdn.microsoft.com/en-us/library/ms743596(v=vs.110).aspx
Hier wird erklärt, wie man auf einen Button-Klick reagiert.

Im Prinzip musst du deinem Button einen Event-Handler für das Click-Event hinzufügen. Dabei gibst du eine Methode an, die aufgerufen werden soll, wenn der Button geklickt wird. Per Code ginge das so:
myButton.Click += new RoutedEventHandler(myEventHandlerMethod);

Alternativ kannst du in WPF auch das Click-Attribut angeben. Beide Varianten werden in dem Beispiel demonstriert.

In dieser Event-Handler-Methode müsste dann bei dir eben sowas in der Art stehen:
myButton.Content = currentDate + " " + currentTime;

Viele Grüße,
Harrier
 
Hallo,
erst einmal danke für die schnelle Hilfe,
leider hat mich das bis jetzt nicht wirklich weiter gebracht.
Wenn ich den Code übernehme bekomme ich diese Fehlermeldung:

Code:
Fehler: Auf einen nicht statischen Member des äußeren Typs "Zeit_und_Datum_mir_WPF_Versuch_2.MainWindow" kann nicht über den geschachtelten Typ "Zeit_und_Datum_mir_WPF_Versuch_2.MainWindow.RoutedEventAddRemoveHandler" zugegriffen werden.
Ich hoffe ihr habt noch einen anderen Vorschlag bzw. eine Internetseite wo es noch ein bisschen besser erklärt ist.

LG Janik
 
Hallo, erstmal danke für die schnelle Antwort,
ich habe mein Code jetzt wieder komplett
gelöscht und bin immer noch nicht viel weiter.

Ich habe mittlerweile herausgefunden das ich das
ganze über die Binding Funktion machen muss.
Nun ist mir aber immer noch unklar wie ich diese Binding Befehle
verwende.

Könntest du mir eventuell sagen wie ich die TextBox mit dem Button verbinden kann
und den Button mit dem Befehl für die aktuelle Uhrzeit?

Danke schon mal im voraus.

LG Janik
 
Hallo Janik

Du musst einfach das machen, was da oben steht. Im XAML machst du beim Button einen Handler für das Click-Event, der Designer erstellt den entsprechenden Funktionskörper und du kannst da dann einfügen, dass die Textbox den Inhalt der aktuellen Zeit bekommt.

Viele Grüsse
Cromon
 
Hallo Cromon,

entschuldige bitte meine "Dummheit".
Ich hatte den Text heute morgen komplett falsch interpretiert bzw. ihn unaufmerksam durchgelesen.
Ich werde jetzt mal versuchen alles umzusetzen und ggf. Fehlermeldungen und Programmcode
hier nochmal reinschreiben.

LG
Janik
 
Okay, ich habe den Code von oben weitgehend übernommen hab aber noch einige Fehlermeldungen.


Hier erst mal mein Code (ohne die Using...):
Code:
namespace WpfApplication1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow() {
  InitializeComponent();
        }
            
    public partial class RoutedEventAddRemoveHandler {
    void MakeButton(object sender, RoutedEventArgs e)
    {
  Button b2 = new Button();
  b2.Content = "New Button";

        b2.Click  += new RoutedEventHandler(Onb2Click);
        root.Children.Insert(root.Children.Count, b2);
        DockPanel.SetDock(b2, Dock.Top);
        text1.Text = "Now click the second button...";
        b1.IsEnabled = false;
    }

  DateTime now = DateTime.Now;
  string currentDate = now.ToLongDateString();
  string currentTime = now.ToLongTimeString();


}
}
}

und hier der Code von XAML:

Code:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Background>
        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
            <GradientStop Color="#FF606079" Offset="0" />
            <GradientStop Color="WhiteSmoke" Offset="1" />
        </LinearGradientBrush>
    </Window.Background>
        <StackPanel>
        <Button Name="b1" Height="38" Width="306">Aktuallisieren</Button>
        <TextBlock Name="text1" Height="179">Start by clicking the button below</TextBlock>
    </StackPanel>
    </Window>

Und hier die Liste von Fehlermeldungen :(

Code:
Auf einen nicht statischen Member des äußeren Typs "WpfApplication1.MainWindow" kann nicht über den geschachtelten Typ "WpfApplication1.MainWindow.RoutedEventAddRemoveHandler" zugegriffen werden.	

Auf einen nicht statischen Member des äußeren Typs "WpfApplication1.MainWindow" kann nicht über den geschachtelten Typ "WpfApplication1.MainWindow.RoutedEventAddRemoveHandler" zugegriffen werden.	

Der Name "Onb2Click" ist im aktuellen Kontext nicht vorhanden.	

Der Name "root" ist im aktuellen Kontext nicht vorhanden.	

Der Name "root" ist im aktuellen Kontext nicht vorhanden.	

Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "WpfApplication1.MainWindow.RoutedEventAddRemoveHandler.now" verweisen.	

Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "WpfApplication1.MainWindow.RoutedEventAddRemoveHandler.now" verweisen.


Bitte entschuldigt meine Fehler doch ich bin noch ein totaler Anfänger auf dem Gebiet, habe mich vorher nur mit HTML und Microkontroler Programmierung auseinander gesetzt.

Ich hoffe ihr könnt mir weiterhelfen.

LG Janik
 
Hallo Janik

Also zuerst einige Fragen zur Klärung:
Warum plötzlich zwei Buttons? Anfänglich wolltest du doch einfach beim Klick auf nen Button in ner Textbox ein Datum anzeigen

Warum rückst du deinen Code nicht sauber ein? So ist das ganze doch gleich viel übersichtlicher:
C#:
namespace WpfApplication1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
	public partial class MainWindow : Window
	{
        	public MainWindow() 
        	{
        			InitializeComponent();
        	}
            
    		public partial class RoutedEventAddRemoveHandler 
        	{
    			void MakeButton(object sender, RoutedEventArgs e)
    			{
        			Button b2 = new Button();
        			b2.Content = "New Button";
 
        			b2.Click  += new RoutedEventHandler(Onb2Click);
        			root.Children.Insert(root.Children.Count, b2);
       				DockPanel.SetDock(b2, Dock.Top);
        			text1.Text = "Now click the second button...";
        			b1.IsEnabled = false;
    			}
 
    			DateTime now = DateTime.Now;
    			string currentDate = now.ToLongDateString();
    			string currentTime = now.ToLongTimeString();
        	}
	}
}

Nun siehst du auch, dass dein Datumscode irgendwo im Nirgendwo hängt einfach innerhalb der Klasse des Eventhandlers.

Du definierst zwar eine Command-Handler Klasse aber im XAML fügst du die nirgendwo als Handler hinzu.

Innerhalb einer Klasse kannst du nicht auf die Member einer Instanz der umgebenden Klasse zugreifen, dazu brauchst du eine Instanz dieser Klasse.

Schlussendlich musst du es auch gar nicht so kompliziert machen. Wie ich sagte: Geh einfach auf den Button, füge im XAML das Click-Event ein und der Designer erledigt den Rest, alles was du dann noch machen musst ist den Code für das Datum in die entsprechende Methode einfügen.

Viele Grüsse
Cromon
 
Zuletzt bearbeitet:
Hallo,

erst mal erneut ein großes Dankeschön.
ja du hast recht ich möchte auch nur einen Button machen, warum ich den Code nicht sauber eingerückt habe weiß ich selber nicht genau. Was muss ich denn bei XAML als Handler eintragen und was meinst du mit "Der Designer erledigt den Rest".

Meine "Codes" sehen jetzt so aus:

Code:
namespace WpfApplication1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
            public MainWindow() 
            {

                    InitializeComponent();
                        DateTime now = DateTime.Now;
                        string currentDate = now.ToLongDateString();
                        string currentTime = now.ToLongTimeString();
}
            
                            public partial class RoutedEventAddRemoveHandler 
                            {
                            void ZeitDatum(object sender, RoutedEventArgs e)

und so:

Code:
<StackPanel>
        <Button Name="b1" Click="ZeitDatum" Height="38" Width="306">Aktuallisieren</Button>
        <TextBlock Name="text1" Height="179">Start by clicking the button below</TextBlock>
</StackPanel>

Ist es jetzt bis hierhin richtig und wie muss ich jetzt weiter machen.

Danke nochmal das du dich mit so einem "inkompetenten Fall" wie mir beschäftigst!
LG
Janik
 
Zurück