Laden...

Forenbeiträge von p!lle Ingesamt 1.040 Beiträge

08.01.2018 - 08:58 Uhr

Der Code von RED-BARON sieht starkt nach Java (Android Studio) aus. Das erkennt man z.B. an den kleingeschriebenen Methoden.
Wenn du mit Visual Studio und Xamarin entwickelst, reicht es i.d.R. die Methoden groß zu schreiben. Auch heißen einige Klasse anders, wie z.B. die Flags-Klasse beim Intent. Da sollte IntelliSense aber helfen.

  
Path.Combine(Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads), "AppDownload.apk");  

Du kannst beim Path.Combine() übrigens mehrere Teilstücke angeben, ein verschachteln ist nicht notwendig:

Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads, "AppDownload.apk");

Path.Combine Method (String,String,String)
Path.Combine Method (String,String,String,String)
Path.Combine Method (String[])

06.01.2018 - 17:40 Uhr

Was für einen Fehler gab es?

Beim Path.Combine musst du beim zweiten Teil auf jeden Fall das "/" weglassen.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

05.01.2018 - 14:41 Uhr

@Josch_58:
Die Implementierung ist an sich sogar korrekt, nur für ObservableCollections eben überflüssig.
Das OnPropertyChanged() wird doch in dem Fall nur ausgelöst, wenn die komplette Instanz der Collection ausgetauscht wird - was im Normalfall nie passiert (und wenn doch, deutet es mMn auf einen Fehler hin).

05.01.2018 - 13:24 Uhr

Die Datenquellen sind doch alles ObservableCollection. Normalerweise brauch man dann doch kein INotifyPropertyChanged.

Das ist ein Trugschluss. Eine ObservableCollection "überwacht" nur die Collection an sich, also wenn z.B. ein neuer Eintrag zur Collection hinzugefügt wird oder ein Eintrag aus der Collection gelöscht wird.

Dass das bei anderen Felder klappt, kann Zufall sein.

05.01.2018 - 12:42 Uhr

Weitere Ergänzung:
Das "Problem" mit dem Runden tritt in deinem Beispiel nur zu Tage, weil es beim Berechnen von 18,9 * 100 zu einer Ungenauigkeit kommt: 1889.9999999999998

Würde - wie angenommen - 1890 in den Klammern stehen, würde auch der korrekte Wert zurückgeliefert werden. =)

05.01.2018 - 09:40 Uhr

Kannst du mal bitte die Abhängigkeit zwischen den Daten aus dem DataGrid und der eigenständigen (?) ComboBox erklären? Bin irgendwie nicht mitgekommen. 😁

04.01.2018 - 09:11 Uhr

Die Fragen treten deshalb auf, weil im Code im verlinkten Artikel Environment.getExternalStorageDirectory zum Download genutzt wird. Natürlich wird dann ein externes Speichermedium benötigt.

Allerdings sollte es kein Problem darstellen, an der Stelle den internen Speicher zu nutzen. 😉

02.01.2018 - 09:48 Uhr

Kannst du evtl. das Projekt in abgespeckter Form zur Verfügung stellen?

😉

02.01.2018 - 09:29 Uhr

Fehler beim Erstellen. Möchten Sie den Vorgang fortsetzen und den letzten erfogreichen Build ausführen. Ja / Nein
Wenn ich Ja drücke, bekomme ich den oben genannten Fehler .

Drücke mal bitte auf NEIN.
Und schaue dann in die Fehlerliste.

24.12.2017 - 16:53 Uhr

Die Frage ist nicht so einfach zu beantworten.

Es kommt natürlich darauf an, bei welchem Control du auf die Parent-Property zugreifst.

Im Anhang findest du ein ganz einfaches Fenster mit 2 Button drauf - der eine liegt direkt auf dem Fenster, der andere liegt auf einem Panel. Das Panel liegt auf dem Fenster.
Greifst du nun bei den beiden Button jeweils auf die Parent-Property zu, ist der Parent einmal das Fenster und beim anderen das Panel.

Wenn du über den PanelButton zum Fenster kommen willst, musst du 2x Parent aufrufen:

panelButton.Parent.Parent

Warum dein Beispiel nicht funktioniert können wir hier so nicht sagen, dafür müssten wir das sehen. =)

22.12.2017 - 16:20 Uhr

Kannst du mal erklären, was du genau vor hast?

Generell gibt es die Parent-Property unter WinForms für jedes Steuerelement, welches von Control erbt. Die Property kann dabei null sein.

Schaue dir mal den Link an und gucke, ob dir das schon weiter hilft.

22.12.2017 - 16:09 Uhr

Was für ein TabControl nutzt du? Da sind nämlich Eigenschaften bei, die das normale TabControl nicht hat. =)

Ansonsten funktioniert aber auch der Code.
Kannst du evtl. das Projekt in abgespeckter Form zur Verfügung stellen?

22.12.2017 - 15:32 Uhr

Also ich kann das Verhalten nicht nachstellen. 🤔
Kannst du zufällig den Code der beides TabPages zur Verfügung stellen?

21.12.2017 - 14:33 Uhr

Kannst du bitte nochmal erklären, was du genau machen willst?

19.12.2017 - 11:26 Uhr

Trotzdem komisch, dass das normale Setzen nicht ausreicht.

19.12.2017 - 10:16 Uhr

Fühlt sich irgendwie wie ein Bug an.

Andere Eigenschaften (z.B. Background) kann man ja auch problemlos nochmal setzen und er übernimmt es, nur bei der Border scheint das nicht zu klappen. 🤔

EDIT sagt noch: BorderStyle.Fixed3D geht - BorderStyle.None aber nicht. 🤔

18.12.2017 - 14:55 Uhr

Über den Debugger kannst du auch wunderbar Breakpoints setzen.
Und wenn er dort anhält, kannst du im Call Stack (Debug - Windows - Call Stack) sehen, wo du herkommst.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

18.12.2017 - 14:53 Uhr

Bitte den Code und das XAML als Text posten, danke. =)

12.12.2017 - 15:05 Uhr

Zeige mal bitte den Code, vermutlich wird der EventHandler zu oft angemeldet.

08.12.2017 - 08:49 Uhr

Ja, ohne Dollar-Zeichen über die Systemsteuerung auf Windows 7. 😁
Ich probiere es heute mal auf Arbeit aus.

07.12.2017 - 18:54 Uhr

Was mich ein bissel verwundert:
Der AVD Manager stammt ja aus dem Android SDK. Und aus dem Android Studio wird - soweit ich mich richtig erinnere, habe es nicht mehr installiert - auch nur diese .exe aufgerufen. Jetzt kann das Android Studio diese Umgebungsvariable nutzen, der AVD Manager aber nicht, das passt irgendwie hinten und vorne nicht. 🤔

Evtl. bin ich aber auch gerade nur zu dumm die Umgebungsvariable anzulegen. 😁
Vllt. hat ja einer Lust das mal zu testen. 👍

07.12.2017 - 18:43 Uhr

Das Verzeichnis kann man wohl über eine Umgebungsvariable festlegen:

Sets the path to the directory that contains all AVD-specific files, which mostly consist of very large disk images. The default location is $ANDROID_EMULATOR_HOME/avd/. You might want to specify a new location if the default location is low on disk space.

Muss mich mal selber zitieren.

Wie es scheint, wird diese Umgebungsvariable nur im Android Studio verwendet, auf den reinen Android Virtual Device Manager und das Visual Studio scheint sie keine Auswirkungen zu haben. Schade.

06.12.2017 - 20:59 Uhr

Du benötigst keinen eigenen Button.
Einfach x:Key="ButtonTemplate" im Style weglassen und es sollte auch so gehen.

06.12.2017 - 15:33 Uhr

...als auch die Android-Abbilder (.android) unter C:\users.. abgelegt werden

Auch das ist kein Visual Studio-Problem. 😉

Das Verzeichnis kann man wohl über eine Umgebungsvariable festlegen:

Sets the path to the directory that contains all AVD-specific files, which mostly consist of very large disk images. The default location is $ANDROID_EMULATOR_HOME/avd/. You might want to specify a new location if the default location is low on disk space.

Quelle: Emulator Environment Variables

05.12.2017 - 11:35 Uhr

Kleiner Code zu Jamikus Antwort:

foreach(char einTollerChar in charArray) //Iterieren
{
    if(einTollerChar == 'a') //Überprüfen
    {
        DrawString(einTollerChar, Color.Red)
    }
    else
    {
        DrawString(einTollerChar, Color.Green)
    }
}

Das BEISPIEL ist nur im Browser getippt, die Methode wird es so nicht geben. Aber so ähnlich muss es aussehen.

05.12.2017 - 11:14 Uhr

Ja, du kannst jeden einzelnen Buchstaben in einer anderen Farbe zeichnen.

Scheiterst du jetzt am if-else oder am Zeichnen?
Bitte beschäftige dich intensiv mit den Grundlagen von C#.

[FAQ] Wie finde ich den Einstieg in C#?
[Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

05.12.2017 - 09:17 Uhr
char[,] labyrinth = new char[zeilen, spalten];  
public char[] Labyrinth { get; set; }  

Weil die Property und das Feld eben diese unterschiedlichen Datentypen haben.
Vermutlich hat wcseller den Code einfach im Browser getippt, da kann das schon mal passieren.
Du kannst den Datentyp der Property einfach entsprechend anpassen.

[FAQ] Wie finde ich den Einstieg in C#?

04.12.2017 - 14:57 Uhr

1.Nutze bitte die richtigen Code-Tags ([C#] über dem Eingabefeld!) 1.Mache dich mit dem [Artikel] Debugger: Wie verwende ich den von Visual Studio? vertraut, dann kannst du schauen warum er wo aussteigt...

30.11.2017 - 15:49 Uhr

Das Event MouseMove ist mMn schon zuverlässig.

Die Frage ist, wie lange dauert dein EventHandler?
Normalerweise kommt das MouseMove ja ständig, wenn du in einem bestimmten Bereich die Maus bewegst. Dauert die Abarbeitung des EventHandlers jetzt etwas länger, wird das Event nicht mehr ständig gefeuert.

29.11.2017 - 14:42 Uhr

alles sollte in die Methode Schnitt_selectionChanged() passiert.

Du solltest es vermeiden mit EventHandlern und CodeBehind zu arbeiten.

Dein Problem kann wunderbar mit MVVM und DataBinding gelöst werden.
Entsprechende Links und auch Beispiele hast du dafür ja bereits bekommen. =)

23.11.2017 - 14:53 Uhr

Ein Beispiel wären z.B. die Währungscodes, für die es alphabetische und numerische Codes und einen Namen gibt. Der Benutzer, der mit den numerischen Codes arbeitet findet die Sortierung nach dem Namen bestimmt doof.

Danke. 👍
Wobei das ja auch keinen Einfluss auf das Problem hat.

23.11.2017 - 12:59 Uhr

Mal davon ab, dass ich wie Taipi88 nicht verstehe warum du zwei ComboBoxen brauchst:

Womit kommst du nicht weiter?*den Wert einer ComboBox in Abhängigkeit der anderen ComboBox zu setzen *dynamisch Werte zu den ComboBoxen hinzuzufügen

🤔

23.11.2017 - 10:45 Uhr

Hast du die Möglichkeit, das Projekt an einem anderen Rechner zu testen?

23.11.2017 - 09:12 Uhr

Also auf Windows 7 funktioniert der Tooltip ohne Probleme.

Etwas ist mir aufgefallen:

The time period, in milliseconds, the balloon tip should display.

This parameter is deprecated as of Windows Vista. Notification display times are now based on system accessibility settings.

Nutzt du in Windows 10 den Tabletmodus?

20.11.2017 - 10:00 Uhr

...Ersetze ich nun controls👍wnGroupBox durch GroupBox, bekomme ich keinen Fehler mehr...

Kleine Ergänzung:

<GroupBox>
    <TextBlock ... />
    <ContentPresenter ... />
</GroupBox>

wird auch einen Fehler liefern.
Zwar nicht den von dir erwähnten, aber diesen:> Fehlermeldung:

The object 'GroupBox' already has a child and cannot add 'ContentPresenter'. 'GroupBox' can accept only one child.

Man kann direkt in der GroupBox nur ein Element definieren. Möchte man mehr, muss man erst einen StackPanel, Grid o.ä. definieren. =)

17.11.2017 - 15:36 Uhr

einmal komplett zu löschen und dann wieder per Ereignisse einzufügen.

Klingt stark danach, dass der Eventhandler nicht am Event angemeldet war.
Du hättest über den Debugger ([Artikel] Debugger: Wie verwende ich den von Visual Studio?) gesehen, dass er nicht in den Code reinläuft.

15.11.2017 - 16:17 Uhr

Nun, eine Abfrage, die ich in der IDE erarbeitet habe und da funktioniert, sollte dann auf dem Server doch genauso funktionieren.

Du hast aber keine Abfrage, die du dann auf den Server schiebst.
Es geht mir um den Unterschied zwischen DataTable.Merge und MERGE (Transact-SQL) (@Sir Rufo: den Merge-Befehl auf dem Server meinst du doch?) und der unten getätigten Aussage.

Wenn du den DataTable.Merge-Befehl nutzt, testest du natürlich diesen und stellst dann irgendwann fest: ja, das klappt alles ("Wenn das mal alles richtig läuft").
In dem Moment sieht dann du Vorteile den Merge auf dem Server durchzuführen. Dann musst du das aber auch nochmal neu programmieren und testen. Wie kontrollierst du da, ob das, was du programmierst, richtig läuft?

Kurz gesagt: wenn du Operationen auf einem Server durchführst, wirst du so oder so nicht in der IDE sehen, ob das Programmierte richtig ist, d.h. du musst auch mal auf den Server schauen.

Ich übertrage die Daten zum Server und dort wird entschieden, was er davon übernehmen muss.
Du holst dir alle Daten vom Server (wieviel das auch immer sein muss) und entscheidest dann welche Daten du zum Server übertragen willst.
Und wie kontrollierst Du, ob das, was Du programmiert hast, auch richtig läuft ?
Solange meine Daten lokal in der IDE verarbeitet werden, kann ich jederzeit mal reinsehen, ob alles so ist, wie ich es mir vorstelle.
Halte ich vom Ansatz her für einfacher.
Wenn das mal alles richtig läuft, ja, ich glaube, dann hat deine Methode durchaus Vorteile.

15.11.2017 - 11:44 Uhr

Und wie kontrollierst Du, ob das, was Du programmiert hast, auch richtig läuft ?
Solange meine Daten lokal in der IDE verarbeitet werden, kann ich jederzeit mal reinsehen, ob alles so ist, wie ich es mir vorstelle.
...
Wenn das mal alles richtig läuft, ja, ich glaube, dann hat deine Methode durchaus Vorteile.

Du kontrollierst dann aber doch nur den Teil den du in der IDE schreibst, und sagst dann irgendwann "passt". Dann lagerst du den Merge in den Server aus, wer sagt dir dann, dass das alles funktioniert? 🤔
Du kannst auch auf dem Server Daten vergleichen, wenn du dort den Merge einbaust.

14.11.2017 - 15:31 Uhr

Gleiches gilt z.B. auch beim Thema Schnittstellen. Der eine sagt, man soll auf Schnittstellen programmieren, der andere sagt nein. Hab mir auch das Buch "Framework Design Guidelines" für mein Vorhaben zugelegt. Da wird im Übrigen auch von Programmierung auf Schnittstellen abgeraten.

Hast du rein zufällig dazu einen Link (oder steht das nur im Buch?)?

09.11.2017 - 08:54 Uhr

Am Besten das ganze DataGrid, tue mich immer schwer damit sowas nachzubauen. 😁

08.11.2017 - 16:09 Uhr

Zeig mal bitte ein bissel mehr (relevanten) Code.

08.11.2017 - 13:31 Uhr

Tut mir leid, aber du hast gerade ein grundsätzliches Verständnisproblem.

Entweder du zeichnest selbst oder du nutzt die Standardzeichenfunktion (base.OnPaint).
Wenn beides fehlt, siehst du natürlich nichts.

Nichtsdestotrotz nochmal der Hinweis auf den Post von Th69. Das Setzen der Size und des Image gehört nicht in das OnPaint()!

08.11.2017 - 13:16 Uhr

Die Frage kannst du dir mit Logik alleine beantworten. =)

Prüfe dann mal bitte, ob die Ausgangsproblematik behoben ist.

08.11.2017 - 13:05 Uhr

Da zeichnest du nicht selbst, logisch oder? 😉

siehste die info mit dem base.OnPaint hat aber gefehlt 🙂

Jein. Das war ja nur ein Folgeproblem. Dein Problem war das Verschwinden der Tooltips und daran war einfach das ständige Setzen des Textes Schuld. Unabhängig davon, ob man base.OnPaint auskommentiert oder nicht, ist es grundsätzlich falsch, die Text-Property im OnPaint zu verändern (vor allem wenn man es immer 2x macht).

08.11.2017 - 12:40 Uhr

@pille: an deiner antwort sieht man das du das projekt nicht einmal ausgeführt hast oder?

Da muss ich dich enttäuschen, ich habe das Projekt runtergeladen, entpackt, geöffnet, gestartet und mir das Verhalten angeschaut. Danach habe ich einen Breakpoint im 90-if gesetzt und gesehen, dass der Debugger da nie mehr raus kommt. Alles, um dir zu helfen.

Dass du Code aus lauter Langeweile schreibst, habe ich zu keiner Zeit behauptet. Trotzdem löst eben das ständige Setzen des Textes deine Probleme aus.

Den Text-Kauderwelsch bekommst du übrigens weg, wenn du das base.OnPaint() weglässt - das führt ja die Standardzeichenaktion durch.

Kurz: this.Text = ... und base.OnPaint(e); auskommentieren und alles läuft wie gewünscht.

und auch die geschichte mit den parametern alles schön und gut funktioniert aber zum einen und wenn ich es weg nehme ändert sich trotzdem nix an dem problem. und der textalign war mal dynamsch ist aber derzeit fix. hatte damit nur rumgespielt.

Dazu noch kurz ein, zwei generelle Sätze.
Es mag sein, dass es am Verhalten nichts ändert. Trotzdem sollte man immer minimalistisch programmieren und nur das tun, was man wirklich benötigt. Das hilft u.a. dabei, a) den Überblick zu behalten und b) die Fehlerquelle einzugrenzen.
Das ist einfach ein Tipp und muss nicht gleich abgebügelt werden.

08.11.2017 - 11:48 Uhr

Ein Problem an deinem Code ist, dass das OnPaint() nach einem Klick auf "Drehen" ständig aufgerufen wird.

if (this.PoRotateAngle == 90)
{
    ...
    this.Text = "";
    ...
}
this.Text = NewText;

Das bewirkt ein ständiges neu zeichnen! Quasi eine Endlosschleife.

Deswegen nochmal der Verweis auf die Antwort von Th69:

Hallo,

direkt läßt sich aus dem Code nicht entnehmen, warum es zu diesem Verhalten kommt.
Generell ist aber die OnPaint-Methode falsch implementiert: in dieser sollten nur reine Zeichenmethoden aufgerufen werden, keine Änderungen von Eigenschaften o.ä. (denn diese rufen intern wiederum weitere Ereignisse auf).
Packe also alle logischen Abfragen und Zuweisungen in die Setter der entsprechenden Eigenschaften (denn dafür sind diese da).
Also u.a. Font-Zuweisung in den Konstruktor, BorderStyle in die Eigenschaft PoRahmen, ...

EDIT sagt noch: warum setzt du die Text-Property überhaupt jedes Mal neu? Die TextAlign-Property ebenso, ändert sich doch sowieso nie...

08.11.2017 - 11:19 Uhr

Die Diskussion ist irgendwie ziemlich entgleist. 😉

Die Rückgabewerte einer Methode haben per se erstmal überhaupt nichts damit zu tun, ob man Backgroundworker oder async/await nutzt.

Auch eine "normale" Funktion die so aussieht:

void GetAdress(out string street, out int number, out string zipCode, out string location);

ist doch ziemlicher murks und sollte eher so aussehen:

Adress GetAdress();

class Adress
{
    public string Street { get; }
    public int Number { get; }
    public string ZipCode { get; }
    public string Location { get; }
}

Das Grundkonzept sollte schon vor async/await so aussehen.
Nutzt man jetzt async/await wird aus dem Rückgabewert eben Task<Adress>, ganz einfach.

PS: Ich denke nicht, dass er überall List<string> durch das Programm schleift, das war wohl eher nur ein Beispiel. 😉

Edit sagt noch @Kaladial:
Task<Irgendwas> steht für Task<TResult>, d.h. das Ganze ist generisch. Zu dem Thema spuckt Google einiges aus.

06.11.2017 - 08:58 Uhr

Kannst du das Projekt mal zur Verfügung stellen?

02.11.2017 - 16:38 Uhr

Also mit Form als Basisklasse funktioniert auch der Code.