Grüß Dich Ogridi,
Die Klasse ToolBar liefert Dir dafür doch zwei Wege.
z.B.
int size1, size2;
size1 = toolBar1.ClientSize.Width;
size2 = toolBar1.Size.Width;
System.Windows.Forms.MessageBox.Show(size1.ToString() + "\n" + size2.ToString());
Dies liefert Dir die Breite Deiner ToolBar, welche ein paar Pixel dünner ist als das Form in dem es plaziert wurde. Was ja nur logisch ist, weil das Form selbst ja einen Rahmen hat, der nicht zur ToolBar gehört. Würdest Du vom Form den FormBorderStyle auf "None" setzen, wäre das Form genauso Breit wie die ToolBar.
Gruß
Markus Seidl
Kann man vielleicht nicht allgemein sagen. In meinem einzigen Windows-Forms Projekt reagiert meine Form auf die Events alle direkt selber, weil es keinen anderen Programmteil gibt, der sowas irgendwie interessant finden könnte. Ich verwende also gar keine Handler. Ich finde es mit Redefinieren einfacher und laut MSDN
The OnClosing method also allows derived classes to handle the event without attaching a delegate. This is the preferred technique for handling the event in a derived class.
Begründung fehlt hier aber auch.
Einen Vorteil hat die Methode mit Redefinieren auf jeden Fall, du kannst entscheiden, ob die Event-Handler das überhaupt mitgeteilt bekommen. Wenn du eine MessageBox anzeigst "wollen sie wirklich beenden" und der User sagt nein, dann rufst du einfach base.OnClosing() nicht auf.
Mein Gefühl sagt mir, dass VB.NET hier genau richtig aufgehoben ist, weil es sich praktisch 1:1 auf C# abbilden lässt. Man muss natürlich die Syntax kennen, aber die Konzepte sind größtenteils die gleichen.
Hallo,
danke für die Tipps !
Ich konnte den Fehler soeben beheben, indem ich das .net Framworks repariert habe und dann wieder installierte; hab da auf die VS Hilfe zurückgegriffen.
Gruß,
John
Tja, das wusst ich nicht. Wenn's in .Net 1 kein äquivalent zum ParameterizedThreadStart gibt, dann würde ich ein Instanz-Delegate verwenden und Datenelemente als Parameter auslesen.
Servus,
Bitmap* b = new Bitmap(this->BackgroundImage);
b->MakeTransparent(Color.IrgendeineFarbe);
this->BackgroundImage = b;
Der TransperencyKey von deiner Form muss exakt der zu transparent machenden Farbe entsprechen. D.h. das der TransperencyKey deines Forms auch Color.IrgendeineFarbe sein muss.
mfg
Hellsgore
Danke für die Hilfe! Ich habe mich jetzt ein bisschen tiefer in die Thread Klasse eingegraben und habe die Methode Abort() gefunden, diese löst die von dir angesprochene Exception aus und beendet den Thread sofort.
Wie Noodles es sagt, der die Runtime nicht hat, muß er die installieren und kann dann dein Programm starten...
Du kannst die mitliefern mit deinem Programm.
Ich hab mich jetzt dazu entschlossen, eine zwangsweise maximierte Form mit BorderStyle 'None' zu benutzten, die an sich komplett unsichtbar ist. Die Toolbar, die ich eigentlich anzeigen will hat dann halt eine andere Hintergrundfarbe und ist links / rechts / ... an der Form angedockt.
Läuft ja aber prinzipiell in die gleich Richtung wie dein Vorschlag :D.
Thx nochmal und bis bald!
Ogridi
Warum denn nicht so?
enum WERTE {
A = 0x00000001
, B = 0x00000010
, C = 0x00000100
, D = 0x00001000
, E = 0x00010000
, F = 0x00100000
, G = 0x01000000
, H = 0x10000000 };
int speicher = 0;
// A und B setzen:
speicher |= A;
speicher |= B;
// Ist A gesetzt?
if(speicher & A) == A) {
// Ja, A ist gesetzt.
// Jetzt löschen wir A wieder
speicher &= ~A;
}
War misverständlich von mir. Du kannst im Debugger IDs vergeben (Rechtsklick -> make object id). Ob sich die IDs unterscheiden könntest du aber auch immer recht schnell sehen, wenn du sowas wie object.ReferenceEquals(a, b) auf die Watchlist tust.
Weil man auf die einfachsten Lösungen immer zuletzt kommt ;), und weil Du im C++ mit Zeigern arbeiten kannst ;).
Rein Theoretisch wäre es bei einem Modalen Aufruf sogar über return Funktion möglich. Wenn man aus der zweiten Form Klasse den Aufruf ShowDialog überläd (bzw. wenn Du keine Paramete Liste angibst, wirst Du das normale Show Dialog verdecken), und dann statt einem Void einen Integer "ShowDialog" erzeugt. Dann kann man sich sogar diese öffentliche Variable sparen. Du kannst aber auch einen Alternativen ShowDialog erzeugen (z.B. ShowDialogInt). Würde im C# ungefähr so aussehen.
//zusätzliche Funktion in der Klasse des aufzurufenden Dialogs (Form2)
public int ShowDialogInt()
{
this.ShowDialog();//erst wenn der Dialog geschlossen wird, springt er weiter zum "return"
return testVar;
}
Und der Aufruf der Funktion würde so aussehen. Damit kannst Du Dir sogar eine instanzierte Variable sparen
//Kurze Schreibweise
public void Button1Click(object o, SystemEventArgs e)
{
this.myTargetVar = (new Form2()).ShowDialogInt();
}
//In der Normalform sieht das so aus :)
public void Button1Click(object o, SystemEventArgs e)
{
Form2 testForm = new Form2();
this.myTargeVar = testForm.ShowDialogInt();
}
Gruß
Markus Seidl
Benutz Doch mal Setup - Project
oder
Setup - Wizard <---- dieser nimmt dir bestimmt nen paar Schritte ab
(Benutzerführung)
Ich denke man sollte hier mal nach TRY/ERROR vorgehen. Und dann installier deine Software mal auf nen Rechner wo Du weisst das die SDK fehlt! Wenns klappt
weisst Du auch wie du ein Setup - Projekt durchführst! Versprochen!
mfg
Hab mir mal ne Form erstellt wo es ein Textfeld gibt wo man den URL ner Seite
eintragen kann dann noch nen Button wo man die Internetseite laden kann!
Sowie ein MultLine - TextBox wo man die Daten der InternetSeite anzeigen kann!
Die CallBack - funktion des Buttons der die Seite lädt und den Inhalt in die MultiLine - TextBox kopiert sieht so aus!
private void btnLoadURL_Click(object sender, System.EventArgs e)
{
if(txtURL.Text.Length != 0)
{
Uri myUri = new Uri(txtURL.Text);
// Create a 'HttpWebRequest' object for the specified url.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
// Send the request and wait for response.
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader streamReader = new StreamReader(myHttpWebResponse.GetResponseStream());
while(streamReader.Peek() >= 0) // ist noch ein leesbares zeichen im Stream
{
txtHTMLFile.Text = txtHTMLFile.Text + streamReader.ReadLine();
}
}
// Release resources of response object.
myHttpWebResponse.Close();
}
Jetzt könnte man diesen String über Reguläre ausdrücke auf die gewünschten Währungen hin untersuchen dazu gibt im .NET - Framework ne Klasse
dazu um die zu verwenden zu können musst Du ne using - Klausel einbinden
using System.Text.RegularExpressions;
Guck mal in der MSDN - Hilfe unter Regex
Dann kannst Du auch das mit deinem Einheitenrechner lösen
mfg sclearscreen
P.S.: Will Dir nicht alle Arbeit abnehmen oben muss ausserdem aum die Schleife
noch nen try{....}catch(...){...} - Block drumherum, Such Dir das aber mal alles selbst zusammen das bringt Erfahrung mit .NET - Framework