Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von xxxprod
Thema: GUI-Applikation & verschiedene Hardware-Schnittstellen: 3-Schichtenmodell richtig verstanden?
Am im Forum: Rund um die Programmierung

Zitat von Locutus
Mmmh, die Idee war eigentlich, dass automatisch nach der Sensorhardware gesucht wird und nix eingestellt werden muss. Im Fall der o.g. seriellen Ports eine feste Baudrate, etc. und im Falle eines Wechsel auf direkte USB-Kommunikation gibt's wahrscheinlich auch nix einzustellen.

Ich hab mich dabei auf dein Kommentar bezogen:
Zitat von Locutus
Von der GUI zur Logikschicht, also bspw. für die Einstellungen der Sensoren, hier bin ich unschlüssig, wie das aussehen soll


Zitat von Locutus
Ich hab eine eigene Klasse für den COM-Port definiert. Hier gibt's ein privates Serialport-Objekt, welches bei Instanzierung nach der Hardware sucht. Öffentlich mache ich nur die o.g. Funktionen über das Interface. Meinst du das mit auslagern und kapseln?
Jap genau das meinte ich... nur nochmals wiederholt um die Wichtigkeit hervorzuheben :)


Zitat von Locutus
Das hatte ich vergessen zu erwähnen, ich bin "klassisch" mit WinForms unterwegs. Ich sehe keine Vorzüge in WPF (wobei ich mich mit tieferen Infos dazu auch nicht weiter beschäftigt habe). Da VS wohl keinen Editor dafür hat und man dafür auch noch XML(?) an der Backe hat, um die GUI zu definieren, war das für mich nicht interessant.

Ich habe auch mit WinForms angefangen und sehe seit WPF keinen Grund mehr das Zeugs jemals wieder anzugreifen :)
Es ist sicherlich eine Umstellung aber man arbeitet sich glaub ich da schnell ein da es mMn. wesentlich intuitiver ist als WinForms.


Ein Qualitätskriterium für mich ist wie testbar Code ist (weswegen ich ständig vom Testen rede) - ich arbeite nicht immer (eher selten) nach TDD-Regeln aber zumindest schau ich dass ich alles soweit entkopple, dass jeder entscheidende Code-Pfad ohne Nebeneffekte getestet werden kann. Das begingt wie schon mehrmals erwähnt beim Auslagern von Code in eigene Klassen, weiter noch die Abhängigkeiten der Klassen untereinander durch Interfaces definieren, sodass am Ende jede Klasse beispielsweise nur mit "Fake-Instanzen" getestet werden kann.

Thema: GUI-Applikation & verschiedene Hardware-Schnittstellen: 3-Schichtenmodell richtig verstanden?
Am im Forum: Rund um die Programmierung

Hallo Locutus,

das ist schon mal ein guter Ansatz den du da vorgeschlagen hast und einiges bei der Implementierung ist mMn. wirklich Geschmackssache und solche Vorgehensmodelle sollen dabei helfen die Komplexität zu reduzieren sowie Test- und Wartbarkeit verbessern.

Ich würde auch so Anfangen die externen Resourcen zu kapseln. Die verschiedenen Hardware-Schnittstellen zB. durch ein gemeinsames Interface kann für gewisse Consumer im Code Sinn machen um einheitlich mit den Schnittstellen zu kommunizieren aber speziell die Konfiguration der unterschiedlichen Hardware-Schnittstellen wird sich mit einem allgemeinem Interace nicht abbilden lassen und somit wird man vermutlich Richtung GUI konkretere Interfaces pro Hardware-Schnittstelle brauchen.

Mal abgesehen von den Interfaces die man dafür definiert, der Zugriff sollte ausgelagert und gekapselt sein, was das Testen dieser Schnittstellen erst ermöglicht.

Eine Logik-Klasse kann wahlweise entweder alle Schnittstellen kennen und bedienen oder noch einmal separat pro Schnittstelle existieren - und vlt. noch eine Logik-Klasse darüber haben die diese wieder vereint... Auch wieder aus dem selben Aspekt der Test-und Wartbarkeit. Wenn die Logik sich pro Hardware-Schnittstelle gravierend unterscheidet würd ich teilen, ansonsten reichts wsl. in einer.

Die Logic-Klasse kann wie du vorgeschlagen hast per Calls und Events mit den Hardware-Schnittstellen-Klassen kommunizieren und selbst seine Zugriffe auch wieder durch Funktionen und Events öffentlich machen.

Richtung GUI (angenommen du verwendest WPF) hast du dann ein ViewModel pro View die du darstellen willst, welche die notwendigen Properties (für die View) im Sinne von MVVM an die Gui-Elemente bindet. Die ViewModels sind dann für die Interaktion mit den Logics verantwortlich.

Dein Beispiel mit GetPorts(): Das ViewModel ruft zB. bei der Initialisierung (oder auf Abruf per ICommand von der View getriggert) die Funktion der Logic.GetPorts() auf und setzt das Result einem "Port[] Ports{get;set;}" Property, welches durch INotifyPropertyChanged die GUI benachrichtig, dass diese sich aktualisieren und neue Werte darstellen soll.
Das ViewModel hat quasi die Aufgabe, die Logics für die View besser konsumierbar zu machen.

Auch in den Views und ViewModels: Wenn du die Hardware-Schnittstellen per View Konfigurieren willst, brauchst du wsl. spezifische Views pro Hardware-Schnittstelle (da wsl. unterschiedliche Parameter konfiguriert werden) und dazu spezifische ViewModels, welche diese dann den Logics order Hardware-Schnittstellen-Klassen weiterleiten können.

Also zusammengefasst schaut dein Ansatz unterhalb der GUI schon ordentlich aus und Richtung GUI schau dir [Artikel] MVVM und DataBinding an und auch den WPF Example Code von OxyPlot an.

Da du durch das Auslagern des Codes in verschiedene Komponenten wsl. viele Klassen inkl. Interfaces erzeugen wirst empfiehlt sich Dependency Injection einzusetzen um die Abhängigkeiten zu reduzieren, das Kompositionieren der Services zu vereinfachen und vor allem um den Code testbarer zu machen.

LG, XXX

Thema: Wie kann ich im WPF an Properties meiner Klasse binden?
Am im Forum: GUI: WPF und XAML

Hallo Mattes80,

Zitat von MrSparkle
DataContext kann nur ein Objekt zugewiesen werden. Normalerweise hat das Fenster ein MainViewModel, und die einzelnen Unterbereiche im Fenster dann spezielle Unter-ViewModels, welche als Eigenschaften im MainViewModel liegen. Das kann beliebig verschachtelt werden.

Nach dem Schema würde ich auch vorgehen und du könntest es dann zB so schachteln:

MainViewModel
-> SprachViewModel
-> DatenbankViewModel
-> FunktionsViewModel

Die Struktur kannst du auch in Form von verschachtelten Views wiederspiegeln und zB eine ähnliche Struktur in den Views anlegen:

MainView
-> SprachView
-> DatenbankView
-> FunktionsView


Das Hauptfenster bekommt als DataContext dann das MainViewModel und alles weitere ergibt sich rein aus den Bindings:

<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">

    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>

	<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <local:SprachView Grid.Column="0" DataContext="{Binding Path=SprachViewModel}"></local:SprachView>
        <local:DatenbankView Grid.Column="1" DataContext="{Binding Path=DatenbankViewModel}"></local:DatenbankView>
        <local:FunktionsView Grid.Column="2" DataContext="{Binding Path=FunktionsViewModel}"></local:FunktionsView>

	</Grid>
</Window>

<UserControl x:Class="WpfApp1.SprachView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:wpfApp1="clr-namespace:WpfApp1"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800" 
             d:DataContext="{d:DesignInstance wpfApp1:SprachViewModel}">
	<Grid>
		<ListView ItemsSource="{Binding Sprachen}" />
	</Grid>
</UserControl>

und die entsprechenden ViewModels stark vereinfacht:


	public class MainViewModel
	{
		public SprachViewModel SprachViewModel { get; set; } = new SprachViewModel();
		public DatenbankViewModel DatenbankViewModel { get; set; } = new DatenbankViewModel();
		public FunktionsViewModel FunktionsViewModel { get; set; } = new FunktionsViewModel();
	}

	public class SprachViewModel
	{
		public List<string> Sprachen { get; set; } = new List<string> {"Deutsch", "Englisch"};
	}

	public class DatenbankViewModel
	{
		public List<string> Datenbanken { get; set; } = new List<string> {"DbA", "DbB"};
	}

	public class FunktionsViewModel
	{
		public List<string> Funktionen { get; set; } = new List<string> {"DoSomething", "DoSomethingElse"};
	}


Lg, XXX

Thema: Umfrage zu "Smart-Cities"
Am im Forum: Smalltalk

Ich hab die Fragen auch unglücklich formuliert gefunden. Danke jedenfalls für das Feedback - das wird ihm hoffentlich auch weiterhelfen. :)

Thema: Umfrage zu "Smart-Cities"
Am im Forum: Smalltalk

Hallo,

ein Kollege in der FH hat im Rahmen seiner Bac-Arbeit eine Umfrage gestartet und gebeten, diese auch an andere weiterzuleiten. Sind 21 Fragen die vielleicht etwas klarer formuliert sein könnten aber trotzdem wärs nett, wenn sich der eine oder andere dafür opfert: Hier gehts zur Umfrage

Danke,
XXX

Thema: ListBox DataTempalte für Items mit ComboBox funktioniert nicht richtig
Am im Forum: GUI: WPF und XAML

Ich kanns nicht erklären warum "Path=." den Wert nicht mehr zurückschreibt aber es ist nunmal so: Man kann nur die Eigenschaften des Context verändern, nicht aber den Context selbst.

Hier ein Beispiel zum Veranschaulichen:

<Window x:Class="WpfApplication2.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">
   <StackPanel Orientation="Vertical">

      <TextBox Text="{Binding TextProp1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
      <TextBox DataContext="{Binding TextProp2, UpdateSourceTrigger=PropertyChanged}"
               Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged}"></TextBox>

   </StackPanel>
</Window>


   public partial class MainWindow : Window
   {
      private string _textProp1;
      private string _textProp2;

      public MainWindow()
      {
         InitializeComponent();

         DataContext = this;

         TextProp1 = "Text1";
         TextProp2 = "Text2";
      }

      public string TextProp1
      {
         get { return _textProp1; }
         set { _textProp1 = value; }
      }

      public string TextProp2
      {
         get { return _textProp2; }
         set { _textProp2 = value; }
      }
   }

TextBox1.Text ist an DataContext.TextProp1 gebunden
TextBox2.Text ist an DataContext gebunden, welcher selbst auf DataContext.TextProp2 geändert wurde.

Wenn du nun einen Breakpoint bei beiden Settern setzt, siehst du das (1) verändert wird aber (2) nicht.

Lg, XXX


//Edit: Um meinen vorigen Vorschlag nochmal zu verdeutlichen: Deine Items in der Listbox müssen in einem Wrapper-Objekt sein, damit du eine Property hast die du verändern kannst. Du kannst nicht den Kontext selbst ändern aber die Eigenschaften sehrwohl.

Thema: EF6 TimeOut bei Skip / Take und gewissen werten.
Am im Forum: Datentechnologien

Hallo Palin,

wie hast du denn das SQL der Statements extrahiert? Per SQL-Profiler? Falls nicht würde ich das nochmal probieren: Die komplette Abfrage (nicht nur die einzelnen separiert) im Profiler loggen lassen und dann gemeinsam im SSMS ausführen lassen um zu sehen obs dort funktioniert.

Weiters kann es sein (und hatte ich schonmal), dass Sachen im SSMS funktionieren, die aber im PGM nicht funktionierten. Ich kann mich nur mehr grob daran erinnern, dass "SET ARITHABORT OFF/ON" da teilweise geholfen hat bzw. kann es auch Probleme mit dem Ausführungsplänen im SQL Server geben. Evt. mal die irgendwo resetten probieren.

Wie schauts aus, wenn du das Timeout anhebst? Wird die anfrage dann fertig oder nicht?

Lg, XXX

Thema: ListBox DataTempalte für Items mit ComboBox funktioniert nicht richtig
Am im Forum: GUI: WPF und XAML

Also um es zum Verständnis zu vervollständigen:

1) Du hast eine ListBox in der die "ausgewählten Produkte" dargestellt werden
2) Irgendwo (extern) fügst du dann ein neues "Produkt" deiner Liste hinzu, welches vermutlich am Anfang leer sein wird.
3) Jeder Eintrag in der ListBox wird durch eine ComboBox dargestellt, welche selbst widerum alle Produkte zur Auswahl hat.
4) Dadurch kann man dann in der Liste der ausgewählten Produkte diese noch verändern, was sich klarerweise auch in der Liste der ausgewählten Produkte widerspiegeln soll.
5) (später soll neben jedem Item in der Liste noch ein Button zum Entfernen hinzukommen)


Ich vermute mal das das Problem bei der Art des Bindings des SelectedItems zu suchen ist.

- Mein erster Versuch wäre, die ListBox-Produkte in eine Wrapper-Klasse "ObservableList<SelectedProduct>" zu stecken. SelectedProduct ist in dem Fall ein ViewModel, welches das Binding erleichtern soll und selbst nur ein Property "Product" (inkl. NotifyPropertyChanged) hat.

- Das Binding auf SelectedItem würde dann nicht auf "Path=." sondern "Path=Product" in SelectedProduct schauen und jede Manipulation würde dann wieder ordentlich in alle Richtungen durchschlagen.

Lg, XXX

Thema: Reaktionszeit für Combobox-Eingaben anpassen
Am im Forum: GUI: WPF und XAML

In dem Link von mir macht einer einen Vorschlag wie er denkt das es gehen könnte. Eine eigene ComboBox basteln ist aber auch nicht so schlimm...

Vielleicht hilft dir aber auch eine sogenannte "AutoCompleteTextBox" weiter. Dazu gibts ein paar Projekte auf CodePlex zB.

Lg, XXX

Thema: GUI "not respondig" ... lässt sich aber wiederbeleben
Am im Forum: GUI: Windows-Forms

Hallo Christel,

- kommt der Freeze immer zur selben Zeit/bei der selben Aktion?
- kannst du das Verhalten beim Debuggen auch nachvollziehen?
- wenn die App gerade eingefroren ist, sieht man dann im TaskManager ungewöhnliche CPU-Last und/oder Festplattennutzung?

Lg, XXX

Thema: Reaktionszeit für Combobox-Eingaben anpassen
Am im Forum: GUI: WPF und XAML

Hallo sth_Weird,

laut Combobox filter text lost when I type the latest inputs with some delay ist dieses Verhalten hard-coded und nicht veränderbar, jedoch hängt es direkt zusammen mit der Doppel-klick Gewschwindigkeit die man in Windows einstellen kann. Habs gerade getestet und es stimmt. Leider hat man aber hier auch nicht sehr viel Spielraum aber vielleicht hilfts ja schon.

Lg, XXX

Thema: Datatrigger: Reagiert auf Änderung des Properties im ViewModel nicht [gelöst]
Am im Forum: GUI: WPF und XAML

Hallo deinChef,

ich kenn mich zwar mit Animations in WPF nicht all zu sehr aus, konnte aber dein Beispiel soweit anpassen, dass es glaub ich das tut, was du willst:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" xmlns:local="clr-namespace:WPFTestApp" x:Class="WpfApplication1.MainWindow"
        Title="MainWindow" Height="350" Width="525">
   <Window.DataContext>
      <local:MainViewModel/>
   </Window.DataContext>
   <DockPanel>
      <Border x:Name="LeftMenuBorder" Background="WhiteSmoke" DockPanel.Dock="Left" CornerRadius="0,5,5,0">
         <Border.Style>
            <Style TargetType="{x:Type Border}">
               <Setter Property="Width" Value="230"/>
               <Style.Triggers>
                  <DataTrigger Binding="{Binding LeftMenuVisible}" Value="True">
                     <DataTrigger.EnterActions>
                        <BeginStoryboard Name="growStoryBoard">
                           <Storyboard>
                              <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="Width" From="0" To="230" />
                           </Storyboard>
                        </BeginStoryboard>
                     </DataTrigger.EnterActions>
                     <DataTrigger.ExitActions>
                        <RemoveStoryboard BeginStoryboardName="growStoryBoard"></RemoveStoryboard>
                     </DataTrigger.ExitActions>
                  </DataTrigger>
                  <DataTrigger Binding="{Binding LeftMenuVisible}" Value="False">
                     <DataTrigger.EnterActions>
                        <BeginStoryboard Name="shrinkStoryBoard">
                           <Storyboard>
                              <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="Width" To="0" />
                           </Storyboard>
                        </BeginStoryboard>
                     </DataTrigger.EnterActions>
                     <DataTrigger.ExitActions>
                        <RemoveStoryboard BeginStoryboardName="shrinkStoryBoard"></RemoveStoryboard>
                     </DataTrigger.ExitActions>
                  </DataTrigger>
               </Style.Triggers>
            </Style>
         </Border.Style>
         <TextBlock TextWrapping="Wrap" Text="{Binding LeftMenuVisible}"/>
      </Border>
      <Border Width="10" Background="Gray">
         <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
               <ei:CallMethodAction TargetObject="{Binding}" MethodName="ChangeVisible"/>
            </i:EventTrigger>
         </i:Interaction.Triggers>
      </Border>
      <Grid/>
   </DockPanel>
</Window>

Wesentliche Änderungen:
- DataTrigger.ExitActions definiert
- Bei der Vergrößern Animation noch ein "from" eingebaut, da beim Reset des vorigen Triggers die Breite wieder den Ursprungswert von 230 hat und somit nichts mehr zu tun ist.

Lg, XXX

Thema: In MeasureOverride Controls erzeugen und in ArrangeOverride platzieren
Am im Forum: GUI: WPF und XAML

Hallo Quaneu,

wenn dein Matrixcontrol nur ein Layout-Container sein soll, dann wärs schöner, wenn er sich nur ums Layout kümmert. Die Visuelle Darstellung würde ich dann entweder per DataTemplates ganz ausserhalb oder in einer Zwischenschicht realisieren.

Bsp:

MatrixLayout wie im Beispiel hier beschrieben: How to create a Custom Layout Panel in WPF

Darüber ein MatrixControl, welches dann aus einem ItemsControl mit MatrixLayout als ItemsPanelTemplate verwendet sowie aus einem custom ItemTemplate besteht. Passend dazu brauchst du dann natürlich attached Properties (wie Grid.Row) um den Child-Elementen die richtige Zeile/Spalte zuzuweisen (oder halt irgendwie automatisch setzen), welche dann vom MatrixLayout verwendet wird um die richtigen Controls zu platzieren.

Aja bzgl. Virtualisierung die in Listbox oder DataGrid stattfindet, hier ein Beispiel: WPF: Custom Virtualizing Panel For TreeView

Du müsstest dein MatrixLayout also von VirtualizingPanel erben lassen.

Lg, XXX

Thema: WPF: DataTrigger bei Checkboxen reagiert nicht
Am im Forum: GUI: WPF und XAML

Zitat von MorphieX
Und wenn du das komplett über das ViewModel abbildest?


Ist sicherlich die schönste Lösung... Einfach die Checkboxen an ein Property binden und dort die Logik abbilden die du erreichen willst.

Thema: WPF: DataTrigger bei Checkboxen reagiert nicht
Am im Forum: GUI: WPF und XAML

Hallo sth_Weird,


als Property im Setter muss natürlich das Ziel-Property (IsChecked) angegeben werden und im Valuebereich kommt dann das Binding inkl. Converter rein:

<Setter Property="IsChecked" Value="{Binding Path=MyFlags, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource FlagsToBoolConverter}, ConverterParameter=FlagXYZ}"></Setter>

Lg, XXX

Thema: System.Windows.Interactivity.dll wird blockiert beim compilieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

- Die System.Windows.Interactivity.dll mal aus dem Zielverzeichnis löschen und schauen ob das Service noch immer läuft.

- Eventuell benötigt eine verwendete Bibliothek diese quasi indirekt?

- Wenn du das Zielverzeichnis cleanst und nur Service-Relevante Projekte kompilierst, wird die System.Windows.Interactivity.dll dann auch rein kopiert?

- Wenn es sich garnicht beheben lässt, könntest du CopyLocal deaktivieren und das File manuell per PostBuild Script ins Zielverzeichnis kopieren (nur wenn unterschiedlich)

Lg, XXX


//Edit:

laut Does Visual Studio 2010 copy assemblies with “Copy Local = true” on every build? sollte die Assembly ohnehin nur kopiert werden, wenn sie neuer ist. - Trifft dies bei dir zu? Haben die teilweise unterschiedliche Versionen?

Thema: ThreadLocal Werte in neuen Thread kopieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie wärs mit einem Singleton der ThreadLocal im Hintergrund verwendet? ThreadLocal hat ja die Eigenschaft IsValueCreated, mit der du im Singleton dann prüfen könntest, ob es sich um einen neuen Thread handlet und ihn gleich dort initialisieren.

Lg, XXX

Thema: WPF: DataTrigger bei Checkboxen reagiert nicht
Am im Forum: GUI: WPF und XAML

Zitat von Coffeebean
Nimm mal bei

das
IsChecked="False" 

raus.

Das wird es wohl sein. Ein Style-Setter kann keine manuell gesetzten Properties überschreiben. Wenn du aus irgendeinem Grund ein Property vom Start weg setzen willst, mach dies ebenfalls im Style per Setter.

Lg, XXX

Thema: OData WebService wirft manchmal "DataServiceContext.SaveChanges" Exception
Am im Forum: Web-Technologien

Wenn mehrere benutzer auf die gleichen Daten zugreifen, musst du die Daten entweder vorher sperren, oder sie mit einem Timestamp versehen und vor dem Update prüfen ob sie sich verändert haben und entsprechend darauf reagieren.

Lg, XXX

Thema: MSSQL: SELECT in SELECT ausführen
Am im Forum: Datentechnologien

Hallo Tam0r,

das was du gepostet hast sollte eh schon funktionieren, wenn du die richtigen Tabellenbezeichnungen/Aliase verwendest.

SELECT
Kunden.Nr,
    (SELECT SUM(Umsätze.Höhe) FROM Umsätze WHERE Umsätze.KundenNr = Kunden.Nr)

FROM Kundenliste Kunden

Lg, XXX

Thema: Daten über serielle Schnittstelle von Arduino!
Am im Forum: GUI: Windows-Forms

Hallo DerPete,

hach, da hat sich ein Tippfehler sowie ein Bedingungsfehler eingeschlichen. Wenn du dich ganz fest anstrengst kommst du vielleicht auch selber drauf.

Lg, XXX

Thema: Daten über serielle Schnittstelle von Arduino!
Am im Forum: GUI: Windows-Forms

Hallo DerPete,

Zitat von DerPete
Danke!

Ich schicke immer "#" vorraus.

Die Anwendung häng sich aber immer auf wenn ich das so ausführe!

was auch auf den ersten Blick klar ist, wenn man sich den Code ansieht.


Mit einer Raute als Löschzeichen könntest du es so probieren:


        private void timer1_Tick(object sender, EventArgs e)
        {
            String input = serialPort1.ReadExisting();

            int i = input.IndexOf("#");

            if(i ≥ 0)
            {
               richTextBox1.Clear();
            }            

            if(i + 1 > input.Length)
            {
               richTextBox1.AppendText(input.SubString(i + 1));
            }

        }

Lg, XXX

Thema: Wpf: Befehl anhand von Checkboxen zusammensetzen
Am im Forum: GUI: WPF und XAML

Hallo ClaRaCapitano,

anstatt beim Checked Event den String zu erweitern, würde ich den Inhalt der Textbox bei _jeder_ Änderung komplett generieren lassen. (Anhand der ausgewählten Optionen)

Die Textbox selbst darf dann natürlich nicht mehr editierbar sein und etwaige zusatzeingaben müssen über entsprechende Formularfelder (bei den Checkboxen) eingetragen werden.

Dies hat zur Folge, dass ganz unabhängig ob etwas an- oder abgehackt wird, immer der richtige Command erzeugt wird.

Lg, XXX

//Edit: Ja prinzipiell eh das selbe was Coffeebean gesagt hat... :P

Thema: Alle Appointments aus Offic lesen und an Form weitergeben (Add on)
Am im Forum: Office-Technologien

Hallo Hobelschlunze

was war daran erfolglos? Hast du das Beispiel probiert?

Lg, XXX

Thema: Alle Appointments aus Offic lesen und an Form weitergeben (Add on)
Am im Forum: Office-Technologien

Google führte mich hier her: C#: Get Event from shared calendar(s)

Lg, XXX

Thema: DataGrid Mapping wie DataGridViewComboBoxColumn mit DisplayStyle Nothing
Am im Forum: GUI: WPF und XAML

@Th69: weil er als Value im Property nur eine Art ID hat und dafür aber einen anderen Wert anzeigen lassen will.

@rokohl: Du kannst einem Binding einen Converter vom Typ IValueConverter oder IMultiValueConverter übergeben, der dann die Konvertierung für dich vornimmt.

Lg, XXX

Thema: converter: Ungültige Typumwandlung von "10" nach double
Am im Forum: GUI: WPF und XAML

Hallo SenseLi,

du kannst entweder den FullQualifiedName der Convert Klasse probieren: System.Convert.ToDouble()

oder du prüfst bevor du konvertierst um welchen QuellTyp es sich handelt und reagierst darauf entsprechend:

in deinem Fall kommt vermutlich ein String "10" den du mit double.Parse() umwandeln könntest.

Lg, XXX

Thema: Anchor bei elementen im Panel z. B TabControl.
Am im Forum: GUI: WPF und XAML

Hallo Exis,

es gilt nach wie vor: Wenn du nicht ordentlich erklärst was du überhaupt erreichen willst, kann dir hier auch niemand helfen.

Du postest einen Codeauschnitt mit einem DockingPanel und einem TabControl als Child und erwähnst nicht das du noch andere Controls darin platzieren willst. Welche, Wieviel und Wohin sollen die denn kommen? Das können wir nicht erraten.

Der Einwand von Lando ist gerechtfertigt: Solange du Width gesetzt hast, wird dein TabControl sich nicht in der Breite automatisch anpassen können.

Den Begriff "Anchor" gibt es im WPF meines Wissens nach nicht mehr. Was stattdessen eben verwendet wird sind automatische (also nicht gesetzte) Breiten & Höhen inkl. passenden Margins und/oder Paddings.

Lg, XXX

Thema: [erledigt] Binding in C# Code
Am im Forum: GUI: WPF und XAML

Hallo flacker,

vielleicht erklärst du noch ein wenig, was du eigentlich vor hast. Wieso willst du, dass Width & Height gesetzt ist, wenn du dann eh nur die Breite und Höhe des Parents übernimmst?

Du kannst auf jeden Fall immer die aktuelle Breite und Höhe mit den Properties ActualWidth und ActualHeight auslesen. Das Setzen der eigentlichen Breite und Höhe sollte man eigentlich vermeiden und mit LayoutContainern arbeiten außer es gibt spezielle Gründe dafür.

Lg, XXX

PS: ActualWidth und ActualHeight werden auch beim Maximieren gesetzt.

Thema: Windows 7 Taskbar
Am im Forum: GUI: Windows-Forms

Hallo Christian1983,

also eine rudimentäre Lösung zu Problem 1 wäre ein Script in den Autostart Folder zu legen das sich selbst nach dem ersten run löscht. In dem Script kannst du dann die restlichen Aufräumarbeiten erledigen die ersten nach dem ersten Login anfallen.

Lg, XXX