Moin,

die Multiplikation zweier Zahlen m und n kann auch als Summe geschrieben werden, was in den gegebenen Termen der Fall ist.

Bild zum Beitrag

n und m sind in einer solchen Multiplikation die Faktoren. Ihr müsst also ein Multiplikation finden die equivalent zu der als Term gegebenen Summe ist.

Beispiel:

2a + 2b = 2 * (a+b)

...zur Antwort
WPF & C#: Erweiterte Stoppuhr erstellen - Fehlermeldungen?

Hallo zusammen,

ich codiere gerade im Visual Studio 2019 in WPF mit der Computersprache C# eine Stoppuhr. Diese soll in einer 24-Stunden-Anzeige dargestellt werden, wo ich auch die Uhr stoppen und wieder laufen lassen kann. Das klappt alles.

Bis ich auf dieses Problem gestoßen bin:

Ich soll noch Zwischenzeiten der gelaufenen Zeit darstellen, die rechts in einer ListBox erscheinen sollen. Daneben noch ein Button namens "Zurücksetzen", der die gesamt gelaufene Zeit auf 0 zurücksetzt.

So sollte das Ergebnis aussehen:

swoutput.png (434×296) (sourcecodester.com)

(in dem Fall -> Mark = Zwischenzeit)

Bei mir stellt er es aber nicht so dar.

Dies ist hier mein Quelltext in Visual Studio 2019:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace Wpf_Stoppuhr
{
  /// <summary>
  /// Interaktionslogik für MainWindow.xaml
  /// </summary>
  public partial class MainWindow : Window
  {
    DispatcherTimer timer = new DispatcherTimer();

    private int zs = 0, sek = 0, min = 0, h = 0;

    private bool pruef = true;

    public MainWindow()
    {
      InitializeComponent();
      timer.Tick += new EventHandler(timer_Tick);
      timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
      L_Ausgabe.Content = "0 : 0 : 0 : 0";
    }

    private void timer_Tick(object sender, EventArgs e)
    {
      zs++;

      if (zs == 10)
      {
        sek++;
        zs = 0;
      }
      else if (sek == 60)
      {
        sek = 0;
        min++;
      }
      else if (min == 60)
      {
        min = 0;
        h++;
      }
      else if (h == 24)
      {
        h = 0;
      }

      L_Ausgabe.Content = h + " : " + min + " : " + sek + " : " + zs;
    }

    private void B_Start_Click(object sender, EventArgs e)
    {
      if (pruef)
      {
        timer.Start();
        B_Start.Content = "Start";
        pruef = false;
      }
      else
      {
        timer.Stop();
        B_Start.Content = "Stopp";
        pruef = true;
      }
    }

    private void B_zwz_Click_1(Object sender, EventArgs e)
    {
      ListBox1.Items.Add(L_Ausgabe.Content);
    }

    private void B_zurueck_Click(Object sender, EventArgs e)
    {
      L_Ausgabe.Content = " 0: 0 :0 : 0 ";
      ListBox1.Items.Clear();
      timer.Stop();
    }
  }
}
  • B_Start = Start Knopf
  • ListBox1 = die Listbox
  • L_Ausgabe = Label für die Zeit
  • B_zurueck = Button fürs zurücksetzen
  • B_zwz = Button für die Zwischenzeit

Ich wäre sehr dankbar für eine Lösung. :)

Mit freundlichen Grüßen

Cynix

...zur Frage

Moin,

das wäre mein Vorschlag:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace WpfApp1

{

  /// <summary>

  /// Interaction logic for MainWindow.xaml

  /// </summary>

  public partial class MainWindow : Window

  {

    public MainWindow()

    {

      InitializeComponent();

      aTimer = new System.Timers.Timer();

      aTimer.Interval = 1;

      aTimer.Elapsed += OnTimedEvent;

      aTimer.AutoReset = true;

       

    }

    private System.Timers.Timer aTimer;

    private int zs = 0, sek = 0, min = 0, h = 0;

    private bool pruef = true;

    private void B_zwz_Click(object sender, RoutedEventArgs e)

    {

      ListBox1.Items.Add(L_Ausgabe.Content);

    }

    private void B_zurueck_Click(object sender, RoutedEventArgs e)

    {

      aTimer.Stop();

      B_Start.Content = "Start";

      L_Ausgabe.Content = " 0: 0 :0 : 0 ";

      ListBox1.Items.Clear();

    }

    private void button_Click(object sender, RoutedEventArgs e)

    {

      if (pruef)

      {

        aTimer.Enabled = true;

        aTimer.Start();

        B_Start.Content = "Stop";

        pruef = false;

      }

      else

      {

        aTimer.Stop();

        B_Start.Content = "Start";

        pruef = true;

      }

    }

    private void changeLabel() {

      L_Ausgabe.Content = h + " : " + min + " : " + sek + " : " + zs;

    }

    private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)

    {

      try

      {

        zs++;

        if (zs == 10)

        {

          sek++;

          zs = 0;

        }

        else if (sek == 60)

        {

          sek = 0;

          min++;

        }

        else if (min == 60)

        {

          min = 0;

          h++;

        }

        else if (h == 24)

        {

          h = 0;

        }

        this.L_Ausgabe.Dispatcher.Invoke(changeLabel);

      }

      catch

      {

        return;

      }

    }

  }

}

--------------------------------------------------------------------------------------------------------

<Window x:Class="WpfApp1.MainWindow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:local="clr-namespace:WpfApp1"

    mc:Ignorable="d"

    Title="MainWindow" Height="450" Width="800">

  <Grid>

    <Label x:Name="L_Ausgabe" Content="&quot;0 : 0 : 0 : 0&quot;" HorizontalAlignment="Left" Margin="147,145,0,0" VerticalAlignment="Top" RenderTransformOrigin="-4.065,0.891" Width="89"/>

    <Button x:Name="B_Start" Content="Start" HorizontalAlignment="Left" Margin="93,0,0,0" VerticalAlignment="Center" Height="35" Width="180" Click="button_Click"/>

    <Button x:Name="B_zwz" Content="Mark" HorizontalAlignment="Left" Margin="93,267,0,0" VerticalAlignment="Top" Height="35" Width="73" Click="B_zwz_Click"/>

    <Button x:Name="B_zurueck" Content="Reset" HorizontalAlignment="Left" Margin="200,267,0,0" VerticalAlignment="Top" Height="35" Width="73" Click="B_zurueck_Click"/>

    <ListBox x:Name="ListBox1" Margin="400,108,146,108"/>

  </Grid>

</Window>

...zur Antwort

Moin,

du musst den Gültigkeitsbereich deiner Variable beachten. Du deklarierst und definierst den String erg in der Methode istgleich_Click nur unter Berücksichtigung der Bedingung in Zeile 199. Das bedeutet, dass auf diese Zeichenkette auch nur innerhalb dieser bedingten Abzweigung zugegriffen werden kann. Ereignet sich der entsprechende Click und triggert die Methode aber das Rechnungszeichen ist ungleich '+', wird der String weder erzeugt noch gibt die Methode etwas zurück. Da allerdings vereinbart wurde, dass sie einen Wert vom Typ string zurückgibt, stellt dies ein Problem dar. Die Methode methode() wird nie auf die Variable zugreifen können. Um dein Problem zu lösen, bietet es sich an, eine globale Variable zu definieren. In etwa so:

Bild zum Beitrag

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.