Я пытаюсь написать собственную GUI для Программы на C#, которая переводит код Морзе в текст. Моя IDE не показывает ошибок, и GUI пока работает. Но когда я пу sh кнопку, для перевода текста, вся программа вылетает. Я уже просмотрел свой код, но не могу найти никаких проблем, потому что IDE может собрать программу, не показывая ошибок.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Morse.Annotations;
using Morse.Command;
namespace Morse.ViewModel
{
public class MorseViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public MorseViewModel()
{
@UComm = new MorseCommand(this);
}
public Dictionary<char, string> MorseCode { get; set; }
private string _meinTextWert;
private string _meinErgebnisWert;
public string MeinTextWert
{
get { return _meinTextWert;}
set
{
if(value == _meinTextWert) return;
_meinTextWert = value;
OnPropertyChanged();
}
}
public string MeinErgebnisWert
{
get { return _meinErgebnisWert; }
set
{
if(value == _meinErgebnisWert) return;
_meinErgebnisWert = value;
OnPropertyChanged();
}
}
public MorseCommand UComm { get; set; }
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Это мой код .xaml для GUI:
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding MeinTextWert}"
MinWidth="250" HorizontalAlignment="Left" TextWrapping="NoWrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto"/>
<TextBox Grid.Column="3" Grid.Row="1" Text="{Binding MeinErgebnisWert, UpdateSourceTrigger=PropertyChanged}"
MinWidth="250" HorizontalAlignment="Left" TextWrapping="NoWrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto"/>
<Button Grid.Column="1" Grid.Row="3" MinWidth="250" Command="{Binding UComm}"
HorizontalAlignment="Center" Content="Übersetzen ins Morse" Padding="0.5"/>
И это мой код для моей ButtonCommand:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
using Morse.ViewModel;
namespace Morse.Command
{
public class MorseCommand: ICommand
{
private readonly MorseViewModel _morseViewModel;
public MorseCommand(MorseViewModel morseViewModel)
{
_morseViewModel = morseViewModel;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
/*_morseViewModel.MeinTextWert = "test";*/
Dictionary<char, string> MorseCode = new Dictionary<char, string>() {
{'a', ".-"}, {'b', "-..."}, {'c', "-.-."}, {'d', "-.."}, {'e', "."},
{'f', "..-."}, {'g', "--."}, {'h', "...."}, {'i', ".."}, {'j', ".---"},
{'k', "-.-"}, {'l', ".-.."}, {'m', "--"}, {'n', "-."}, {'o', "---"},
{'p', ".--."}, {'q', "--.-"}, {'r', ".-."}, {'s', "..."}, {'t', "-"},
{'u', "..-"}, {'v', "...-"}, {'w', ".--"}, {'x', "-..-"}, {'y', "-.--"},
{'z', "--.."}, {'0', "-----"}, {'1', ".----"}, {'2', "..---"},
{'3', "...--"}, {'4', "....-"}, {'5', "....."}, {'6', "-...."},
{'7', "--..."}, {'8', "---.."}, {'9', "----."}, {'à', ".--.-"},
{'å', ".--.-"}, {'ä', ".-.-"}, {'è', ".-..-"}, {'é', "..-.."},
{'ö', "---."}, {'ü', "..--"}, {'ß', "...--.."}, {'ñ', "--.--"},
{'.', ".-.-.-"}, {',', "--..--"}, {':', "---..."}, {';', "-.-.-."},
{'?', "..--.."}, {'-', "-....-"}, {'_', "..--.-"}, {'(', "-.--."},
{')', "-.--.-"}, {'\'', ".----."}, {'=', "-...-"}, {'+', ".-.-."},
{'/', "-..-."}, {'@', ".--.-."}, {' ', " "}
};
StringBuilder Ausgabe =new StringBuilder();
char EingabeTextBox;
EingabeTextBox = Convert.ToChar(_morseViewModel.MeinTextWert.ToLower().ToCharArray());
for (int i = 0; i < _morseViewModel.MeinTextWert.Length ; i++)
{
if (i % 20 == 0)
Ausgabe.Append('\n');
try
{
Ausgabe.Append(MorseCode[_morseViewModel.MeinTextWert[i]]).Append(' ');
}
catch (KeyNotFoundException)
{
}
_morseViewModel.MeinErgebnisWert = "\n Morse" + Ausgabe;
}
}
public event EventHandler CanExecuteChanged;
}
}```
Я не получаю никаких ошибок в своем EventLog. Это все журналы, которые я получил:
23.03.2020 15:09 Сборка завершена с предупреждениями в 15: 09: 27
15: 48 Сборка завершена с предупреждениями в 15: 48: 05
15: 58 Сборка завершена с предупреждениями в 15: 58: 07
15: 58 Сборка выполнена в 15: 58: 25
15: 59 Построение выполнено успешно в 15: 59: 19
16: 04 Построение выполнено успешно в 16: 04: 33```
Это предупреждения в разделе Ошибки в решении.
![enter image description here](https://i.stack.imgur.com/B7Twl.png)
Я также отладил программу, и это ошибка, которую я наконец-то получил:
System.InvalidCastException: Das Objekt des Typs "System.Char[]" kann nicht in Typ "System.IConvertible" umgewandelt werden.
bei System.Convert.ToChar(Object value)
bei Morse.Command.MorseCommand.Execute(Object parameter) in D:\Schule_Ordner\13. Klasse\Morse\Morse\Command\MorseCommand.cs:Zeile 66.
bei MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
bei MS.Internal.Commands.CommandHelpers.ExecuteCommandSource(ICommandSource commandSource)
bei System.Windows.Controls.Primitives.ButtonBase.OnClick()
bei System.Windows.Controls.Button.OnClick()
bei System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
bei System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
bei System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
bei System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
bei System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
bei System.Windows.RouteItem.InvokeHandler(RoutedEventArgs routedEventArgs)
bei System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
bei System.Windows.EventRoute.ReInvokeHandlers(Object source, RoutedEventArgs args)
bei System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
bei System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject sender, MouseButtonEventArgs e)
bei System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
bei System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
bei System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
bei System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
bei System.Windows.RouteItem.InvokeHandler(RoutedEventArgs routedEventArgs)
bei System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
bei System.Windows.EventRoute.InvokeHandlers(Object source, RoutedEventArgs args)
bei System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
bei System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
bei System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
bei System.Windows.Input.InputManager.ProcessStagingArea()
bei System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
bei System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
bei System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
bei System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
bei System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
bei System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
bei System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage(MSG& msg)
bei System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
bei System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
bei System.Windows.Threading.Dispatcher.Run()
bei System.Windows.Application.RunDispatcher(Object ignore)
bei System.Windows.Application.RunInternal(Window window)
bei System.Windows.Application.Run(Window window)
bei System.Windows.Application.Run()
bei Morse.App.Main()