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 Pulpapex
Thema: externe Datei
Am im Forum: GUI: Windows-Forms

Das heisst der Konstruktor ist schon definiert. Der dateiLesen-Aufruf muss in den schon definierten Konstruktor mit rein. Der zweite Konstruktor kann wieder gelöscht werden.

Thema: externe Datei
Am im Forum: GUI: Windows-Forms

Hi kiwi_girl,

Beim Erzeugen der Form wird zuerst der Konstruktor aufgerufen, da kannst du den dateiLesen-Aufruf mit reinsetzen.

static void Main() {
   Application.Run(new frmSms());
}

// Konstruktor
public frmSms() {

   // [..]

   dateiLesen();
}

private void dateiLesen() {
   // ...
}

Gruss
Pulpapex

Thema: Bild zentrieren
Am im Forum: GUI: Windows-Forms

Das wird daran liegen, dass du Bildvektor jedes Mal wieder mit new Point(0, 0) initialisierst. Der Vektor muss als Membervariable in der Klasse vorgehalten werden, da aus der letzten Bildposition und der aktuellen Mausposition die neue Bildposition ermittelt wird.

Thema: Bild zentrieren
Am im Forum: GUI: Windows-Forms

Hi rs4,

die Mauskoordinaten müssen noch in Image-Koordinaten umgerechnet werden. Das Ganze ist einfache Vektorarithmetik im Control-Koordinatensystem. Es gibt drei Vektoren: Center-Vektor (Control-Mittelpunkt), Mouse-Vektor (Mausposition) und Image-Vektor (Bildposition). Mouse-Vektor minus Center-Vektor ergibt einen Verschiebungsvektor. Dieser muss zum aktuellen Image-Vektor addiert werden, das ergibt die neue Bildposition.

Ich habe mal schnell eine Grafik gebastelt, die das veranschaulicht.

Gruss
Pulpapex

Thema: initialisierungs-error
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi korrupt,

wahrscheinlich ist auf dem Zielrechner keine .Net-Laufzeitumgebung installiert. Schau mal in die FAQ hier im Board.


Gruss
Pulpapex

Thema: WAV-Datei << Spiellänge?
Am im Forum: Grafik und Sound

Ich habe eine WaveFileStream-Klasse geschrieben, die kann man auch nur zum Lesen des Wave-Headers verwenden. Im Konstruktor übergibt man einen System.IO.Stream, danach stehen die Header-Informationen in der Header-Eigenschaft zur Verfügung.

Stream fileStream = File.OpenRead("sound.wav");
WaveFileStream waveStream = new WaveFileStream(fileStream);
WaveHeader h = waveStream.Header;
waveStream.Close();
WaveHeader hat eine Format-Eigenschaft, über die man die oben angegebenen Daten-Bytes abfragen kann.

Eine Zip-Datei mit den cs-Dateien und der Assembly habe ich angehängt. Wahrscheinlich ist die Assembly mit VC# Beta 1 kompiliert. Zur Not nochmal neu kompilieren.


Gruss
Pulpapex

Thema: WAV-Datei << Spiellänge?
Am im Forum: Grafik und Sound

Hi Maddinel,

du musst im Wave-Header den Format-Chunk auslesen. Der Format-Chunk beginnt mit der Zeichenkette "fmt ". Dann folgen die Daten-Bytes:

formatTag : 2 Byte
channels : 2 Byte
samplesPerSec : 4 Byte
avgBytesPerSec : 4 Byte
blockAlign : 2 Byte
bitsPerSample : 2 Byte


Die Spiellänge in Sekunden ergibt sich damit aus:

Dateilänge / samplePerSec * bitsPerSample / 8

Da würde ich aber nochmal nachgooglen, blockAlign muss glaube ich auch noch in die Formel rein.


Gruss
Pulpapex

Thema: .Net Remoting
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auf den zweiten Blick sehe ich jetzt im StackTrace, dass der Fehler auf Serverseite auftritt (der StackTrace ganz oben, danach folgt der StackTrace auf Clientseite). Der Client ruft GetApplications auf. Auf Serverseite soll dann für den Aufruf das registrierte Serviceobjekt geladen und instanziiert werden. Und der Type wird wohl nicht gefunden.

Also das registrierte Serviceobjekt oder ein anderer, verwendeter Type kann auf Serverseite nicht geladen werden. Assembly Programdetector.dll wird nicht gefunden, glaube ich.

Hast du die Projekt-Referenzen zwischen Client- und Server-Projekt schon entfernt?


Gruss
Pulpapex

Thema: Bild zentrieren
Am im Forum: GUI: Windows-Forms

Dann musst du es wohl so machen:

Im Programm gibt es ein grosses Original-Image, in der PictureBox befindet sich nur ein kleineres Arbeits-Image mit dem Bildausschnitt. Bei einem Mausklick ins Bild wird dann aus dem Original-Image der aktuelle Ausschnitt ins Arbeits-Image kopiert. In das Arbeits-Image kann man mit Graphics.FromImage(workingImage) zeichnen. Dran denken, dass das gelieferte Graphics-Objekt unbedingt und so schnell wie möglich mit Dispose wieder freigegeben werden muss (using()-Block).


Gruss
Pulpapex

Thema: Bild zentrieren
Am im Forum: GUI: Windows-Forms

Hast du Scrollbalken? Wenn ja, könntest du die SetDisplayRectLocation-Methode des ScrollableControls (oder einer ScrollableControl-Ableitung), das die Scrollbalken bereitstellt, verwenden.

Ich weiss nicht genau wie die PictureBox-Klasse ihre Scrollbalken bekommt. Von ScrollableControl ableiten, tut sie jedenfalls nicht. Also vermute ich, dass sie in ein ScrollableControl eingebettet ist.


Gruss
Pulpapex

Thema: Verwirrung bei events
Am im Forum: GUI: Windows-Forms

Die System.Windows-Controls sind sauber programmiert.

So ähnlich dürfte die SelectedIndex-Eigenschaft aussehen. D.h. das SelectedIndexChanged-Ereignis wird nur ausgelöst, wenn sich der Wert auch wirklich geändert hat:

public int SelectedIndex {
   get { return selectedIndex; }
   set {
      if(selectedIndex != value) {
         selectedIndex = value;
         OnSelectedIndexChanged(EventArgs.Empty);
      }
   }
}

Gruss
Pulpapex

Thema: eigene textbox-control + cursor?
Am im Forum: GUI: Windows-Forms

Was ist denn an deiner TextBox anders, dass TextBox oder RichTextBox als Grundlage nicht verwendbar sind? Vielleicht bringen uns ein paar Hintergrundinformationen weiter: wie soll deine TextBox aussehen, was soll sie können, wofür soll sie da sein usw.


Gruss
Pulpapex

Thema: .Net Remoting
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wahrscheinlich verwendest du immer noch Typen, die auf Clientseite nicht vorhanden sind. Welche Typen liefert der Aufruf von RIS.ProgramDetector.Interfaces.IProgDetector.GetApplications zurück oder in welchen Typ castest du? Poste mal den Code der ResxProgrammanager.crtlProgramresxHandler.FillGrid-Methode.

Nochmal: alle Interfaces und alle Parameter und Rückgabetypen der Interfaces müssen sich in einer Assembly befinden, die beim Client und beim Server lokal verfügbar ist. Am besten legst du dir eine Solution/Combine mit drei Projekten an: Client, Interfaces, Server. Client und Server haben Referenzen/Verweise auf das Interfaces-Projekt, es darf aber keine Projekt-Referenzen direkt zwischen Client und Server geben.


Gruss
Pulpapex

Thema: eigene textbox-control + cursor?
Am im Forum: GUI: Windows-Forms

Warum leitest du nicht von TextBoxBase ab? Die Klasse implementiert einige Basisfunktionalitäten für "text-manipulierende Controls". Dazu gehört wie es aussieht auch die Caret-Darstellung.


Gruss
Pulpapex

Thema: Komponente erstellen, von welcher klasse ableiten?
Am im Forum: GUI: Windows-Forms

Für spezielle Tasten wie Esc oder die Cursortasten muss IsInputKey oder IsInputChar überschrieben werden.

Schau dir die Doku zu den Methoden an.


Gruss
Pulpapex


// Edit: bin ich doch glatt drauf reingefallen. Programmierhans, kramst du in alten Postings rum? Naja, ich glaube es liegt am IsInputKey.

Thema: GDI+, System.ArgumentException: Invalid parameter used
Am im Forum: GUI: Windows-Forms

Da scheint mir generell irgendwas kaputt zu sein. Hat herbivore schon gefragt, auf welcher Control-Klasse zeichnest du denn?

Thema: GDI+, System.ArgumentException: Invalid parameter used
Am im Forum: GUI: Windows-Forms

Hast du trotzdem mal eine andere Farbe versucht? Was soll der Aufruf denn bewirken? Soll das Control durchsichtig werden?


Gruss
Pulpapex

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Hi MartinE, hast du dir mal den Startbeitrag durchgelesen?

Konnte mir das nicht verkneifen,
schönes WE.

Thema: NumericUpDown verursacht Absturz
Am im Forum: GUI: Windows-Forms

Könnte auch ein Threadproblem sein, aber das sind alles nur Vermutungen. Ich befürchte den Fehler musst du alleine rausfinden, Rapthor.

@svenson
Über die Name-Eigenschaft ändert man im Designer doch die Benennung der Membervariablen. Ist die Membervariable z.B. als this.textBox1 deklariert und man ändert im Designer die Name-Eigenschaft in sagen wir "loginTextBox", ändert sich auch die Membervariable in this.loginTextBox. Ist klar, dass Leerzeichen da Probleme machen würden.

Wenn man ohne visuellen Designer arbeitet, hat die Name-Eigenschaft meiner Meinung nach keine Bedeutung, deshalb kann man angeben was man möchte.

Thema: Events in einem thread abfackeln!
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich glaube Threads aus dem ThreadPool sind schneller. Und zwar werden in diesem doch Betriebssystem-Threads zur Wiederverwendung vorgehalten. Ich dachte der ThreadPool dient gerade zur Ressourcen- und Geschwindigkeitsoptimierung.

AsyncCallback ist keine Klasse, sondern nur ein Delegat, die Callback-Methode, die aufgerufen wird, wenn der Thread beendet wird. In der Doku steht explizit, dass EndInvoke aufgerufen werden muss, um Ressourcen wieder freizugeben. (.. hab aber keine Lust, das jetzt noch rauszusuchen .. geht ab nach hause )


Gruss
Pulpapex

Thema: Events in einem thread abfackeln!
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wenn das selbst programmierte Ereignisse sind, kann man die OnEvent-Methode so programmieren, dass das Ereignis asynchron ausgelöst wird.

Habe ich zwar noch nie gemacht, aber so ungefähr müsste es funktionieren:

// EventA asynchron auslösen.
protected void OnEventA() {

   if(EventA != null) {
      AsyncCallback callback = new AsyncCallback(HandleEventACallback);
      EventA.BeginInvoke(this, EventArgs.Empty, callback, EventA);
   }
}

// Asynchronen Vorgang ordentlich abschliessen.
private void HandleEventACallback(IAsyncResult ar) {

   // Verwendeten Thread beenden/in den ThreadPool freigeben.
   EventHandler eventA = (EventHandler)ar.AsyncState;
   eventA.EndInvoke(ar);
}

public event EventHandler EventA;

Gruss
Pulpapex

Thema: MdiChilds in C#
Am im Forum: GUI: Windows-Forms

Das Einstellungsfenster muss als modaler Dialog geöffnet werden, ein normales Fenster, kein Mdi-Form. Das geht mit Form.ShowDialog. Als Parameter wird das owner-Fenster angegeben, das solange der Dialog offen ist, blockiert werden soll.


Gruss
Pulpapex

Thema: NumericUpDown verursacht Absturz
Am im Forum: GUI: Windows-Forms

Der Wert, der bei der Name-Eigenschaft gesetzt wird, ist Unsinn. Wenn du ohne visuellen Designer arbeitest, kannst du die Name-Eigenschaft getrost ignorieren, braucht man nicht.

Das wird aber nicht der Fehler sein. Hast du beim Control irgendwelche EventHandlers registriert? Ich vermute, du hast irgendwie ne Endlosschleife konstruiert, in der sich Events immer hin und her gegenseitig auslösen.

Kann natürlich auch ne ganz andere Ursache haben. Aus dem angegebenen Code ist die Ursache jedenfalls nicht ersichtlich.


Gruss
Pulpapex

Thema: funktion von dll deklarieren
Am im Forum: Rund um die Programmierung

Ich hab nachgeschaut wie ich mal Arrays gemarshalt hatte. Es hatte ausgereicht [In, Out] anzugeben. Das Array als out-Parameter anzugeben, ging glaube ich nicht. Wahrscheinlich rät hier der Marshaller in welchen C-Typ genau umgewandelt wird, also ist MarshalAs schon ok. text und key würde ich im ersten Anlauf versuchen als string-Parameter zu übergeben, eigentlich sollen es ja Strings sein. Falls es nicht klappt, kann man es erst auch mit MarshalAs versuchen, bevor man einen anderen Typ probiert.

[DllImport("encodeLib.dll")]
private static extern void AuthEncode(
   string text,
   int textLen,
   string key,
   int keyLen,
   [Out] byte[] digest);

Thema: funktion von dll deklarieren
Am im Forum: Rund um die Programmierung

Soll die Funktion in einer .Net-Dll bereitgestellt/veröffentlicht werden oder gibt es sie schon und du möchtest sie in deinem .Net-Programm verwenden?

Ersteres geht nicht, da zum Ausführen von .Net-Code die .Net-Runtime laufen müsste. Das ist nicht gegeben, wenn von C/C++ aus eine Funktion in einer Dll aufgerufen wird. Man kann .Net-Dlls nur als CCW (Com Callable Wrapper) von ungemanagten Code aufrufen lassen, also COM-Programmierung.

Um eine bestehende C/C++ Funktion in .Net zu verwenden, versuche mal folgendes (wird zwar nicht auf Anhieb funktionieren, aber die Fehlermeldung hilft dir vielleicht weiter):

[DllImport("encodeLib.dll")]
private static extern void AuthEncode(
   string text, 
   int textLen, 
   string key, 
   int keyLen, 
   out byte[] digest);

Msdn:
Zusammenarbeit mit nicht verwaltetem Code
Lernprogramm P/Invoke


Gruss
Pulpapex

Thema: .Net Remoting
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie gesagt einfach mal im Board suchen.

Der Thread hier ist glaube ich ganz informativ (wenn du den von herbivore durch hast):
Remote-Event Fehlermeldung

Es geht darum, dass die Client-Anwendung nicht den kompletten Codebestand der Server-Anwendung lokal haben muss. Kann man so lösen, indem der Client nicht direkt auf die Server-Klassen zugreift, sondern nur über Server-Interfaces. Dadurch müssen clientseitig nur die Server-Interfaces verfügbar sein, aber nicht die Klassen.


Gruss
Pulpapex

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Ja, aber da braucht man eine spezielle Bibliothek dafür. Die muss mit der Anwendung mitgeliefert werden.

Wenn man nur ein kleines Programm schreiben möchte, das Mp3s abspielen können soll, ist es doch schön, wenn man mit Boardmitteln auskommen kann, auch wenn die Funktionen sehr rudimentär sind. Besonders, wenn es so einfach ist.

Für komplexere Geschichten ist eine fertige Bibliothek besser geeignet, keine Frage.


Gruss
Pulpapex

Thema: Curser in textbox setzen
Am im Forum: GUI: Windows-Forms

Die Cursorposition wird über die Selektion festgelegt.

textBox.SelectionStart = newCursorPosition;
textBox.SelectionLength = 0;

// Oder
textBox.Select(newCursorPosition, 0);

Gruss
Pulpapex

Thema: .Net Remoting
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ein Client benötigt eine Dll mit den Server-Typen, die er verwendet. Anders herum verhält es sich genauso, der Server benötigt eine Dll mit den Client-Typen.

Am besten du legst dir eine Dll mit Interface-Typen für Client und Server an. Die Dll wird sowohl dem Client als auch dem Server mitgegeben. Selbst definierte Parameter-Typen, die in den Interfaces verwendet werden, gehören auch in diese Dll. Dann sollte es wieder funktionieren.

Ansonsten lies dir auch mal die Beiträge zu Remoting hier im Board durch. Es war schon häufiger Thema und es wurden gute Tipps gegeben.


Gruss
Pulpapex

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

hi maxE,

das sind schön einfache Beispiele, nur leider nur für VB und C++. Wäre ein gutes Thema für einen Artikel hier im Board. Wie man einfach Sound abspielen kann, sowas kann man immer brauchen.

Wenn du Lust dazu hast, da was zu schreiben, wende dich an Alexander, der trägt dich als Autor ein.


Gruss
Pulpapex