Laden...

Forenbeiträge von CWolle Ingesamt 57 Beiträge

30.05.2022 - 17:49 Uhr

Kann man in Visual Studio 2022 die Werte einer Enumeration anzeigen lassen? Wenn ich XAML-Code erstelle, zeigt mir IntelliSense nichts an:


<Window.InputBindings><MouseBinding MouseAction=" ">

05.09.2020 - 12:58 Uhr

Entschuldigung, dass ich es falsch formuliert hatte, aber ich hatte noch nie behauptet, dass ich MVVM verwende.
Ich arbeite mit MVC-Pattern wegen Verwendung von RoutedUICommands in separaten Namespaces (die sind in MVVM gar nicht möglich) statt mit generischen Action<> und Func<>-Delegates.
MVVM ist doch erst bei größeren Anwendungen sinnvoll aufgrund des Overheads

04.09.2020 - 15:53 Uhr

Ich habe ein MainWindow mit diversen Page-Instanzen erzeugt, die durch Clicks angezeigt werden.

Bei Clicks funktioniert im Programm auch alles, aber der Debugger zeigt mir zig BindingExpression-Fehler an. Muss ich die aktuell angezeigte Page bei einem Click immer zerstören? Und wie geht das?


public partial class Page_1 : Page
{
      public static MainWindow haupt;            
      public Page_1(ref MainWindow mw)
      {
            InitializeComponent(); 
            mw.DataContext = ...

31.08.2020 - 13:37 Uhr

in meinem Programm sind mehrere Collections enthalten und wenn eine andere ausgewählt wird, muss ich ja meine TaskbarItemInfo mit den (Vor/Zurück)-Buttons anpassen. Ich bekomme aber immer nur einen Fehler: > Fehlermeldung:

Der String kann nicht in "System.Windows.Input.ICommand" konvertiert werden.

Auch die Lösungsvorschläge von VS zeigen alle denselben Fehler an. Wie kann ich einen bestehenden Command korrekt hinzufügen?


<Window.TaskbarItemInfo>
<TaskbarItemInfo Description="{Binding Description}" >
<TaskbarItemInfo.ThumbButtonInfos>
<ThumbButtonInfo x:Name="tbi_re" ... />


ThumbButtonInfo tbi = (ThumbButtonInfo)this.TryFindResource("tbi_re");
ICommand x = (ICommand) "{x:Static local:Commands.GotoPrevious}");
tbi.Command = x;

27.05.2020 - 09:26 Uhr

Wieso verwendet C# eigentlich ein separates Typsystem mit Wertetypen? Denn eigentlich lassen sich diese ja auch alle auf Klassen zurückführen und wären somit Referenztypen.
Sind Wertetypen nur eine lose Festlegung oder gibt es einen bestimmten Grund für die Deklaration?

28.12.2019 - 16:48 Uhr

Versuchs mal mit folgender Reihenfolge. Wenn die Farbe keine Rolle spielt, müsste es klappen

<Border  Background="Yellow" Margin="50" CornerRadius="90" ClipToBounds="True" />
<Rectangle Opacity="0.8" Width="400" Height="300" Fill="White" Margin="-200 0 200 0"/>
28.12.2019 - 16:31 Uhr

Ich möchte den Content eines Labels mit einer Methode befüllen und habe mir hierzu einen ObjectDataProvider erstellt:

<ObjectDataProvider x:Key="text" ObjectType="{x:Type local:MainWindow}" MethodName="Ausgabe"/>

die Methode Ausgabe() liefert auch nur einen String, in der Vorschau wird sogar alles korrekt angezeigt, aber beim Kompilieren kommt immer nur 10x die Fehler-Meldung:

Fehlermeldung:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(4206,5): warning MSB3026: "obj\Debug\ODP.exe" konnte nicht in "bin\Debug\ODP.exe" kopiert werden. Wiederholung 1 wird in 1000 ms gestartet. Der Prozess kann nicht auf die Datei "bin\Debug\ODP.exe" zugreifen, da sie von einem anderen Prozess verwendet wird. Die Datei wird durch "ODP (12764)" gesperrt.

was mache ich denn falsch?

07.09.2019 - 16:47 Uhr

Ich habe ein MainWindow mit DockPanel für einen Frame und einer DependencyProperty, auf die in der StatusBar verwiesen wird.


<Label Content="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

wenn ich nun im Frame die DependencyProperty ändere, geht das obige Binding einfach verloren, statt sich anzupassen.


public Frame(ref MainWindow haupt)
{
     InitializeComponent();            
     haupt.X = "neu";
 }

wird UpdateSourceTrigger im MainWindow nicht ausgeführt, weil ich mich in einem anderen Frame befinde?

17.01.2018 - 19:36 Uhr

ich gehe davon aus, dass du mit WPF-Elementen arbeitest.
Dann mach doch direkt einen Binding-Befehl mit 2Way-Modus! Einfacher gehts doch nicht

17.01.2018 - 19:29 Uhr

wenn du Regex nicht kennst oder willst:

durchsuch halt deinen ersten String mit IndexOf() nach einem Zeichen, so kriegst du die Index-Nummer. Dann kannst du dir einen Teilstring erstellen

10.01.2018 - 17:11 Uhr

ich habe eine TextBox zum Anzeigen und Ändern von Geldbeträgen. Eine falsche Eingabe soll einen roten Rahmen erzeugen. Ich versuchte dies mit einer Validation Rule, aber plötzlich kann ich die Zeichen ',' und '.' nicht mehr in die TextBox eingeben (alle anderen gehen). Was mache ich falsch?

<TextBox Name="basicPreis">
            <Binding Path="Betrag" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <local:BetragValidationRule />
                </Binding.ValidationRules>
            </Binding>
        </TextBox>

Die ValidationRule lautet:

public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            string wert = value as string;
            try
            {
                double val = Convert.ToDouble(wert);
                return ValidationResult.ValidResult;
            }
            catch
            {
                return new ValidationResult(false, "Keine Zahl");
            }            
        }
08.01.2018 - 08:59 Uhr

Ich habe ein Rechteck aus aneinandergehängten Dreiecken (im Anhang ist ein Bild), das ich in ein Kreisdiagramm umwandeln möchte. CombinedGeometry akzeptiert die Polygon-Objekte nicht. Gibt es noch eine weitere Möglichkeit zum beschneiden?

<Canvas Name="can"  >
            <Polygon Name="pol1" Fill="Aqua" />                     
            <Polygon Name="pol2" Fill="Green" />
            <Polygon Name="pol3" Fill="Yellow" />
            <Polygon Name="pol4" Fill="Gray" />
            <Polygon Name="pol5" Fill="Blue" />
            <Polygon Name="pol6" Fill="Beige" />
            <Polygon Name="pol7" Fill="Pink" />
</Canvas>
07.11.2017 - 09:34 Uhr

Du kannst den String splitten mit der Methode Split(). Gib als Zeichen dann ',' an. Du bekommst so ein Array mit deinen Zahlen

07.11.2017 - 09:31 Uhr
Stopwatch uhr = new Stopwatch(); // am Anfang  
uhr.Start(); // beim Erscheinen 

mit einem Event reagierst du auf ein Klicken und gibst in der Event-Behandlung eben uhr.Stop(); an

07.11.2017 - 09:22 Uhr

Du musst in der Ausgabe der Farbe eine Länge angeben, bspw. 10:
Console.WriteLine("... {0,10}...", variable)

07.11.2017 - 09:15 Uhr

Wo kann man die Dokumentation von C# finden, wo die kompletten Änderungen beschrieben werden?
Es wurden ja auch grundlegende Methoden entfernt (bspw. Thread.Abort), was heftige Fehler verursacht.

Was bringen mir sonst Neuerungen, wenn ich sie gar nicht kenne?

09.10.2017 - 19:32 Uhr

mach dir gleich eine Klasse mit passendem Konstruktor. Struct ist auch nur die "Einschränkung" einer Klasse

09.10.2017 - 19:24 Uhr

ich habe dem DockPanel-Bereich den Frame (mit der CheckBox) nochmals erneut zugewiesen, damit sich die Ansicht aktualisiert. So wird ja der Frame erneut geladen - was InitializeComponent() ausführt.


 Page p = new FrameX();
 haupt = p;
 // Checkbox in p aktualisiert, und jetzt die Page erneut zugewiesen
 haupt = p; 
 

Ich dachte, dass Änderungen an der Ausgabe automatisch angezeigt werden, aber es klappte doch nicht. Erst als ich dann Frame p erneut zuwies, wurde die Ansicht aktualisiert

09.10.2017 - 13:28 Uhr

Danke für den Hinweis, ich habs weiter probiert und die Lösung gefunden:

die Bindung war schon zu Beginn korrekt erfolgt (Abfrage mit Debug), aber ich musste nochmal 'InitializeComponent()' aufrufen, damit die Ansicht der anfangs leeren CheckBox aktualisiert wurde.

09.10.2017 - 11:55 Uhr

ich möchte einige WPF-Elemente an Werte aus einem Array binden. Mit TextBox und DatePicker klappt auch alles, aber ich komme einfach nicht drauf, wie ich eine CheckBox an einen Bool-Wert binden kann.
Ich habs schon mit DataContext, Checked und IsChecked probiert! Die CheckBox bleibt immer leer - wie kann man eine Bindung an eine Boolean-Variable realisieren?

30.09.2017 - 15:45 Uhr

Ich habe eine ListView mit Objekten, die u.a. eine DateTime-Eigenschaft enthalten. Zum Editieren soll das selektierte Objekt in diversen Boxen angezeigt werden (DatePicker, TextBox,...). Die Bindung funktioniert auch überall, bis auf DatePicker. Ich hab es schon mit DataContext, DisplayDate und SelectedDate versucht. Die Objekte sind recht einfach aufgebaut:


public class Termin
{        
        private DateTime? _datum;
        private String _ort;
        private Int32? _dauer;
        private Boolean _bemerkt;
        ...
}

Im ListView funktioniert die Datenbindung problemlos

<ListView ItemsSource="{Binding TerminView, Mode=OneWay}" >
<ListView.View><GridView>
...
<GridViewColumn DisplayMemberBinding="{Binding Datum.Value}" Header="Datum" />
</GridView></ListView.View></ListView>

und auch in den einzelnen Boxen. Aber in DatePicker zeigt es immer nur "Datum auswählen" an. Was mache ich falsch?


<DatePicker DataContext="{Binding Datum}" DisplayDate="{Binding Value}" Name="Datum" />
<TextBox DataContext="{Binding Ort}" Text="{Binding Value}" Name="Ort"  />
29.09.2017 - 14:18 Uhr

führe doch einfach eine Konvertierung in eine Zahl durch, bspw. mit (Convert.ToDouble()

dann kannst du mit if checken, ob dabei ein Fehler auftritt oder nicht...

29.09.2017 - 14:05 Uhr

Ich versteh den Sinn nicht:
?(
Du musst doch wissen, was du programmieren willst! Und VisualStudio zeigt dir in einem Klappfenster doch immer alle vorhandenen Methoden an

28.09.2017 - 11:51 Uhr

Wenn ich bei MVVM-Projekten den Namespace ändere, kommen oft Fehler wie 'InitializeComponents wird nicht mehr gefunden' trotz Neukompilierung!
Neuladen der Projektmappe hilft nichts, wenn ich jedoch Visual Studio beende und neu starte, ist der Fehler weg.
Ich arbeite mit VS2017 Community Version 15.1

28.09.2017 - 11:36 Uhr

Wäre es nicht sinnvoller, erst mal die Grundlagen von C# komplett zu lernen?
Es gibt tolle Bücher! Ich will keine Werbung machen, aber schau dir mal von Andreas Kühnel 'C#6 mit Visual Studio 2015' an - das wirst du nie bereuen!

28.09.2017 - 11:25 Uhr

Mach dir halt einen Anonymen Typ oder eine entsprechende Klasse

24.06.2017 - 13:32 Uhr

ich bin doch in einem C#-Forum, oder?
Das Code-Fenster ist auch mit 'C#-Code' beschriftet! Versteh ich irgendwas falsch?

24.06.2017 - 09:48 Uhr
  • durchsuche jeden String nach dem Index des zweiten "/"
  • nun kannst du einen String generieren von (0-Index)
  • speichere die Strings in einer Collection, dann hast du das Ergebnis
24.06.2017 - 09:34 Uhr

= und == sind nicht dasselbe! In einer if-Anweisung musst du == verwenden zum vergleichen.

24.06.2017 - 09:29 Uhr

bei einem Value-Vergleich musst du entweder .Length() mit 0 vergleichen oder du vergleichst mit NULL. Sonst trifft deine Bedingung nie zu

24.06.2017 - 09:20 Uhr

Wenn du einen String an die Methode übergibst, wird nur eine Kopie verwendet. Deswegen solltest du den Wert mit 'ref' übergeben, damit du das Original bearbeitest.

24.06.2017 - 09:09 Uhr

Wer mit C# ganz von vorne anfangen will, dem empfehle ich folgendes Buch:

Titel: C#6 mit Visual Studio 2015
Verlag: Rheinwerk Computing
Autor: Andreas Kühnel

Wer das Buch mit knapp 1500 Seiten gelesen hat, der hat die Grundlagen von C#6 auch wirklich verstanden und kann darauf aufbauen. Diese 50€ haben sich also auf jeden Fall rentiert.

24.06.2017 - 07:25 Uhr

Mach dir einen Delegaten, den du mit einer Abfrage befüllst. Und dann binde die Delegat-Methode einfach an den Event

24.06.2017 - 07:19 Uhr

Schau mal die Themen 'anonyme Methoden' und 'Lambda Ausdrücke' an

24.06.2017 - 07:04 Uhr

Von Andreas Kühnel ist auch das Buch 'C#6 mit Visual Studio 2015' sehr zu empfehlen, damit du die Grundlagen wirklich verstehst

24.06.2017 - 06:56 Uhr

suche von rechts (for Schleife mit - von length zu 1) nach dem Schrägstrich. So kriegst du eine Position und kannst dann einen Substring erzeugen

23.04.2017 - 12:34 Uhr

Problem gelöst! Die Ursache lag am Style! In App.cs war das ComboBox-Style deklariert mit:

<Setter Property="ComboBox.Width" Value="400" />

In der Wpf-Datei befand sich die ComboBox in einer Spalte mit nur 300. Das aufklappende Menü wird auch breiter dargestellt. So wurden die kurzen linksbündigen Einträge einfach abgeschnitten - ohne jegliche Fehlermeldung!

23.04.2017 - 09:56 Uhr

Die Bindung an eine Enumeration 'enum1' habe ich jetzt hinbekommen mittels

cbox.ItemsSource = Enum.GetValues(typeof(enum1));

es zeigt nun alle Einträge im aufgehenden Klappmenü an, ich kann auch eins auswählen, aber leider wird der ausgewählte Eintrag in der ComboBox direkt einfach nicht angezeigt.
Das wäre doch normalerweise Aufgabe der ComboBox, oder muss ich irgendetwas updaten?

22.04.2017 - 19:59 Uhr

wie kann ich einer ComboBox bei der Initialisierung die erlaubten Werte zuweisen?
Muss ich immer alle selbst mit <ComboBoxItem> hinzufügen, oder kann ich bspw. direkt eine Enumeration zuweisen?
Ich habs schon mit DataContext probiert, aber man darf keine Enumeration angeben

11.04.2017 - 15:27 Uhr

Wenn du nur Bilddateien möchtest, dann probiers doch mit

  if(Dateiname.Split('.')[1] == "gif")

du kannst dann ja alle Bildformate mit | hinzufügen
So kannst du aber auch direkt auf '.ini' abfragen und dann bei Bedarf continue ausführen

11.04.2017 - 09:49 Uhr

Seit ich VisualStudio 2017 installiert habe, kann ich das [Serializable] Attribut nicht mehr verwenden. Ich bekomme immer die Fehlermeldung, dass Typ- bzw. Namespacename nicht vorhanden sind.
Ich wollte auch "using System.Runtime.Serialization.Formatters.Binary;" eingebinden, den gibts nicht mehr!
Wer kennt den neuen Namespace, oder ist Serialisierung ausgelaufen?

22.10.2016 - 16:56 Uhr

Das ist ja der Sinn der Objekt-Orientierung! Schreib dir doch selbst ne statische Klasse!

  • die Methode bekommt einen String fürs Basisverzeichnis
  • daraus suche sie alle Subordner und speichert diese in einem String-Array
  • und nun noch ne Methode, welche in ner Schleife das Array durchläuft

und schon hast du alles selbst geschafft!!! Und kannst die Klasse sogar verkaufen!

19.09.2016 - 17:02 Uhr

Ich hatte ein ähnliches Problem! Kein DB-Zugriff mehr seit ich mit VS15 und Win10 arbeitete!

  • bei neu erstellten DBs klappt alles sofort
  • nur bei alten MDFs ist irgendwo ein Wurm drin
  • meine Lösung: Datenbank mit MS SQL Server Management Studio neu erstellt!
  • Also ist irgendein Kompatibilitäts-Macken mit den alten mdf-Datenbanken, auch wenn mir keiner glauben wollte!
  • denn jetzt klappt ja alles problemlos!
con.ConnectionString = "Data Source=(localdb)\\MSSQLLocalDB; Initial Catalog=Daten; Integrated Security=sspi"; con.Open();
string s = "INSERT INTO dbo.Egal VALUES(...)";
            SqlCommand c = new SqlCommand(s, con);
            c.ExecuteNonQuery();...
29.08.2016 - 17:22 Uhr

Such doch mal nach einer Bibliothek mit Render-Klassen für HTML-Dateien.
Für pdf-Dateien bietet ja bspw. Adobe auch eine entsprechende Möglichkeit an mit einer print-Methode

29.08.2016 - 15:14 Uhr

Ich arbeite mit Visual Studio Community 2015. Da hab ich mir eine eigene Vorlage erstellt, alles klappt, aber sie wird in der Vorlagen-Liste erst ziemlich weit hinten angezeigt. Kann man irgendwo die Positionierung in der Standard-Darstellung verändern - sonst muss ich jedesmal scrollen?
Alternativ gibt es ja sonst nur Sortierung nach Name (aufsteigend/absteigend)

09.08.2016 - 18:41 Uhr

hab ich auch schon probiert - das gleiche Problem!
Ich verstehe einfach nicht, wieso ich in VisualStudio im 'SQL-Server-Objekt-Explorer' direkt eine Anfrage an Northwind absenden kann, und ich bekomme ohne Probleme eine Ergebnisliste

nur im C#-Code klappt keine Verbindung zu alten MDF's. Wenn ich eine neue Datenbank erstelle, dann gehts ja schließlich auch.

09.08.2016 - 15:01 Uhr

Du brauchst für jeden 'Indikator' eine Variable, wo du den Wert reinkopierst - es langt ja der object-Typ. Dann kannst du mit einer Schleife (if oder switch) einfach die Variablen auf NULL abfragen und entsprechend eine jeweilige Methode aufrufen.
In der Methode muss du die Parameter natürlich mit PARAM definieren, dann wird abhängig von der Anzahl der vorhandenen Parameter die passende Version ausgeführt

09.08.2016 - 14:49 Uhr

Seit ich Windows 10 hab, ist der SQL Server 2016 installiert und ich kann mit C# auf keine Datenbank mehr zugreifen

  • Testverbindung funktioniert immer problemlos
  • im Server-Explorer zeigt es die Datenverbindung korrekt an (NORTHWND.mdf)
  • im SQLServer-Objekt-Explorer zeigt es unter Datenverbindungen auch die Datenbank an
  • Remote-Verbindung sind zugelassen
  • Fehlermeldung: Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQLServer. Der Server wurde nicht gefunden oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remote-Verbindungen zulässt
  • ich habs auch schon mit (local), localhost, .\SQLExpress versucht - immer das gleiche
  • mit SQL Server 2012 hats ja bisher auch funktioniert
  • was mache ich falsch?

using System.Data.SqlClient;
...
SqlConnection con = new SqlConnection();
try {
con.ConnectionString = "Data Source=(local); Initial Catalog=Northwind; Integrated Security=sspi";                
con.Open();
} catch ...

wie macht ihr eure Datenbankzugriffe?

28.02.2016 - 10:43 Uhr

Vielen Dank für die Hilfe, ich hatte nicht unter englischen Stichworten gesucht.
ScrollViewer hatte ich nur als Eigenschaften probiert, aber kein allumfassendes ScrollViewer-Element um den Frame erstellt.

28.02.2016 - 09:31 Uhr

Ich möchte -ähnlich wie im Internet- in einem größen-definierten Frame mehrere Page-Objekte anzeigen, die durch ein Menü ausgewählt werden können.
Das funktioniert auch problemlos, aber diese haben unterschiedliche Größen und ich schaffe es nicht, dass automatisch eine Scrollbar angezeigt wird, wenn der Platz nicht ausreicht!

Wie kann man so etwas erreichen, oder ist das nur bei HTML möglich?