Laden...

Forenbeiträge von TOM_MUE Ingesamt 200 Beiträge

24.05.2005 - 16:09 Uhr

Gerade Posting geschrieben schon muss ich mal ne kleine OT Frage stellen.

@tomuc83 wie kommst Du denn auf den dünnen Zweig das Longhorn keine nennenswerten Änderungen mit sich bringen wird? Also wenn man nur mal von dem ausgeht was einem als Programmierer mit Longhorn für Schnittstellen zum BS geboten werden sollen und das aller Voraussicht das neue Framework dann die komplette alte API ersetzen kann (auch wenn sie noch da sein wird) freu ich mich erst recht und kann nur sagen es wird ab der ersten BETA von Longhorn richtig interessant werden zu sehen was alles möglich sein wird.

Beste Grüße

TOM_MUE

24.05.2005 - 16:05 Uhr

Ja, aber nur mit den aplpha versionen von longhorn und whidbey. Die haben wir auf der PDC 2003 bekommen. Beide laufen aber sehr buggi und langsam.

Ich denke mit der BETA1 von Longhorn die VIELLEICHT (ist keine offizielle Meldung von MS) in diesem Herbst oder Spätsommer kommen wird, kann man dann aber auch VS 2005 benutzen. Jegliche andere offiziellen Alpha Versionen von Longhorn gründen ja eh auf der verworfenen BS Platform ( bis auf die der WINHECK 2005, aber die haben ja nur Teilnehmer in die Hand bekommen) oder sind so kompiliert worden, das man keine weiteren Programme installieren kann.

Beste Grüße

TOM_MUE

23.05.2005 - 21:07 Uhr

Hallo @Xqgene,

der GAC ist nix weiter als eine verzeichnisstrultur im Verzeichnis "..\assymbly" (unter windows XP ist der Pfad C:\WINDOWS\assembly). Sobald man aber dieses Verzeichnis aufruft, ist d er Windowsexplorer angewiesen einen Schlüssel in der Registry abzufragen. Dieser befindet sich unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft" und hat den Namen "Fusion". In diesem Schlüssel wird der Eintrag (DWORD) "DisableCacheViewer" abgefragt. Ist der Eintrag nicht vorhanden ist das gleich dem Wert 0. Trägst du den Eintrag (DWORD) ein und gibst im dem Wert 1, zeigt Dir dann der Windowsexplorer die tatsächliche Ordnerstruktur unter "...\assembly" an. Schau doch mal auf diese Art und weise nach ob Deine bereits gelöschte DLL noch vorhanden ist. Wenn ja, sollte sie sich auch referenzieren lassen.

HTH

TOM_MUE

21.05.2005 - 11:43 Uhr

Hallo @Micha,

hast Du Dich in Deinem SetupProject schon mal mit den CustomSetupActions beschäftigt? Stichwort "Add new Item --> InstallerClass". In diesen "installer classes" kannst Du alle Änderungen / Neuerungen die auf dem System mit Deinem Setup eingestellt werden sollen, ausprogrammieren. Dazu kannst Du in der InstallerClass die Methoden OnInstall oder OnUninstall überschreiben (geil ist ja das das Override im deutschen Studio "Außer Kraft setzen" heißt 😉 ).

Weiteres Hier nachlesen

Zitat:
5. Wenn ich das MSI erneut instllieren will, muss ich zunächst das alte deinstallieren. Geht das auch automatisch?

Ja das geht auch automatisch. Diese Option kannst Du in den Eigenschaften ( Properties) des Setup-Projects einstellen.

Beste Grüße

TOM_MUE

21.05.2005 - 11:26 Uhr

Hallo @Xqgene

Solltest Du nicht schon selbst auf die Lösung gekommen sein, dann kann ich Dir ein cooles kleines Tut empfehlen: Hier klicken .

Denke das dürfte Dir schnell weiterhelfen.

Beste Grüße

TOM_MUE

21.05.2005 - 11:20 Uhr

Ein bisschen OT:

Hi @svenson,

also wenn auf deinem rechner der Start von VS .NET 2003 eine Minute dauert, dann würde ich mal checken ob Du nicht ein Add-In für VS .NET installiert hast, das diese Verzögerung mit sich bringt (siehe dazu auch mein Artikel im "dotnet-magazin" 05.05 "Erweiterung nach Maß"). Einen weiteren Startzeitfresser kannst Du in den Optionen von VS .NET abstellen. Lass Dein Studio einfach ohne Startseite starten (tolles Wortspiel).

Das ist wirklich nicht normal wenn der Start eine Minute dauert. So lange dauert er bei einem gesunden VS 2003 auch nicht auf ner PII 450 Mhz Kiste.

Beste Grüße

TOM_MUE

11.05.2005 - 12:58 Uhr

Hallo,

wie kann ich eine *.pst Datei einlesen die nichts mit meinem aktuellen
Posteingang von Outlook zu tun hat? Ich habe diverse Sicherungen von
.pst-Dateien und die sind auf DVDs gespeichert. Nun würde ich diese gerne
über ein ConsolenProgramm auslesen. Das einzige was ich aber erreiche ist
mein aktuelles Postfach von Outlook.
Hier mal mein Code:



static void Main(string[] args) 
{ 
try 
{ 
Outlook.Application app = new Outlook.ApplicationClass(); 

Outlook.NameSpace ns =app.GetNamespace("MAPI"); 

ns.Logon(@"C:\Share\06\archive.pst","Password",false, true); 

Outlook.MAPIFolder l_MyContactFolder = 
ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 

foreach(MAPIFolder l_Folder in l_MyContactFolder.Folders) 
{ 
Console.WriteLine(l_Folder.Name); 
} 

Console.Read(); 
} 
catch(System.Exception ex) 
{ 
Console.WriteLine(ex.ToString()); 
Console.Read(); 
} 
} 


Den angegebenen Pfad kann ich aber ändern wie ich will oder auch weglassen.
Ich bekomme immer nur mein aktuelles Postfach (grummel).

Weiß da einer einen Rat?

Vielen Dank

TOM_MUE

07.04.2005 - 10:17 Uhr

Hallo Noodles,

Vielen dank für die schnelle Antwort! Ja, es funktioniert.

Big >THX

TOM_MUE

07.04.2005 - 09:55 Uhr

Hallo,

ich würde sehr gerne herausfinden, ob der Benutzer meines Programmes in der Gruppe der Administratoren ist ( also Admin- Rechte besitzt ) oder nicht. Man kann zwar solche Informationen auch über ADSI überprüfen aber das ist ziemlich schreibaufwendig. Gibt es eine schnellere Möglichkeit das herauszufinden?

Vielen Dank

TOM_MUE

14.02.2005 - 14:23 Uhr

Hallo @redcross,

im Solutionexplorer der 2005er Express- Version (BETA1) gibt es oberhalb einen Button (Icon) mit dem Du alle Elemente der Solution einblenden kannst ("Show all Items"). Damit kannst Du auch die "Form1.Designer.cs" einblenden.

Zum Thema "Partielle Typen":

Implementierung kann über mehrere Datein verteilt sein
Gilt für Klassen und Strukturen (und in C# für Interfaces)
Eingeleitet durch neuen Ausdruck partial
Bieten eine Vielzahl von Vorteilen
Riesige Codewüsten können in Dateien aufgeteilt werden
Geschriebener kann von erzeugtem Code getrennt werden
Verhindert ein Überschreiben bei Neu-Generierung
Wird von WinForms und streng-typisierten DataSets verwendet
Verschiedene Entwickler können sehr einfach an der gleichen Klasse arbeiten
Ermöglicht code-beside im Gegnsatz zu code-behind
Wird verwendet von ASP.NET 2.0
Erleichtert Wartung und Code-Verwaltung

Bsp:


// Demo.Part1.cs
using System;

public partial class Demo
{
   public Demo()
   {
      Console.Write( "P1" );
   }
}


// Demo.Part2.cs
public partial class Demo
{
   private int i;
}

// Demo.Part3.cs

// Error!
public class Demo
{
   // Error!
   private int i;

   // OK
   private int j;

   public void Test()
   {
      // Error!
      Console.Write( "P3" );
   }
}

Hinweise findest Du unter


Vorschau: Visual C# "Whidbey"


Neue Features in C# 2.0


Neues in C#: Partial Class Definitions


Partielle Typen

HTH

TOM_MUE

10.02.2005 - 16:09 Uhr

Hallo @Massaka,

Hier mal ein Lösungs- ANSATZ. da sist sicher keine direkte Lösung für Dein Vorhaben. Vielleicht hilft Dir das Bsp. aber.


// DummyMethode für die Thumbnail- bildung.
		private bool Foo()
		{
			return false;
		}

		private void FillImageList(string a_ImagePath)
		{
			// Zuweisen der Imagelist für das ListView Control.
			this.listView1.LargeImageList = this.m_ImageLRoot;

			// Erstellen eines Beispielbildes.
			Image l_Image = Image.FromFile(a_ImagePath);

			// erstellen eines Standard-Miniatur-Bildes.
			Image l_NewImage = l_Image.GetThumbnailImage
				(
				100,
				100,
				new Image.GetThumbnailImageAbort(this.Foo),
				IntPtr.Zero
				);

			// Füllen der ImageList.
			for(int i = 0; i < 13; i++)
			{
				this.m_ImageLRoot.Images.Add(l_NewImage);
			}
				
			// Füllen des ListView- Elementes.
			for(int idx = 0; idx < this.m_ImageLRoot.Images.Count;idx++)
			{
				this.listView1.Items.Add(new ListViewItem("BildText",idx));
			}
		}

Ein weiterer Lösungsansatz für Vorschaubilder als Tutorial geschrieben findst Du hier: Miniaturansicht ohne Zwangsjacke

HTH

TOM_MUE

09.02.2005 - 09:53 Uhr

Hallo @UweR,

leider kenne ich mich persönlich nicht sehr gut damit aus aber ich kenne zufällig jemanden der für Mono ein cooles Tutorial geschrieben hat. Wenn Fragen sind, kann man ihm auch mailen.

Link 1
Link 2

Hoffe das es das Richtige ist.

Gruß

TOM_MUE

03.02.2005 - 15:45 Uhr

Nachtrag,

seit dem 01.02.05 gibt es von Frank Fischer auf den MSDN- Webseiten eine schöne Zusammenfassung der Features zu Visual Studio 2005.

Hier der Link
.

HTH

TOM_MUE

02.02.2005 - 11:03 Uhr

Hallo @Rincewind,

Es gibt ein kostenloses Buch zu SharpDevelop. Dies Buch ist aber verständlicher weise in Englisch, denn es handelt sich ja schließlich um ein Community- Projekt an dem nicht nur deutsch sprechende Entwickler oder Schweizer arbeiten. Somit ist Englisch die Sprache nummer eins.

Link zum E-Book

Tja, und nun die nächste schlechte Nachricht für Dich 😉. Bei Visual Studio 2005 wirst Du mit Sicherheit in einem BETA- Stadium keine Anleitung finden. Erst recht nicht in deutsch. Es gibt hier und da einige deutschsprachige Artikel, die sich mit neuen Features der einzelnen Programmiersprachen beschäftigen. Frank Fischer von MS hatte bis heute eine große Tour zum Thema Visual Studio 2005 durch ganz Deutschland. Diese TechTalk- Veranstaltung war kostenlos. Warst Du dabei 😉?
Unter folgendem Link: Visual Studio 2005 First Contact findest Du die Powerpoint- Slides zum kostenlosen Download. Anbei eine kleine Werbung in eigener Sache. Ab der CEBIT 2005 schau mal auf der www.tom-mue.de vorbei. Dort wird dir dann eventuell auch geholfen 😉

Hier noch ein paar Links zum Visual Studio 2005

Windows Forms mit Visual Studio 2005

Das Feature "Bearbeiten und Fortsetzen" in C# 2.0

Gruß und HTH

TOM_MUE

07.10.2004 - 14:13 Uhr

Hi @sinaloe,

Farge in Deinem Code den Pfad zu der ausführenden Assembly (dein Programm ) ab. Kombiniere dann den Pfad der Assembly mit dem Namen der Datei die Du suchst und frage über die Klasse File im Namensraum System.IO ab, ob die Datei existiert.

BSP:



using System;
using System.IO;
using System.Reflection;

namespace IsFileExist
{	
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			string l_Path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

			l_Path = Path.Combine(l_Path,"TestFile.txt");

			if(File.Exists(l_Path))
			{
				Console.WriteLine("Die Datei ist vorhanden");
			}
			else
			{
				Console.WriteLine("Die Datei ist nicht vorhanden");
			}

			Console.Read();
		}
	}
}


Für das Durchsuchen der Festplatte/n nach der Datei kannst Du ein rekursives Durchsuchen der Laufwerke starten. Ein BSP. findest Du hier

HTH

TOM_MUE

www.tom-mue.de

23.08.2004 - 08:21 Uhr

Hallo Xqgene,

danke für Deinen Hinweiß. Ja mir ist bewußt das es nicht den gebräuchlichen Code Guidelines für C# / .NET allg. entspricht. Da es aber kein Pflichtprogramm für .NEt gibt, habe ich mich für diese Übergangslösung entschieden.

Für die BETA2 ist schon ein kleines Fenster implementiert, in der der Programmierer die Möglichkeit hat den Namen für das Property einzutragen. Schwierig wird es mit der automatisierten Property- Namens- Verteilung wenn zum Bsp. Class- Fields mit "m_" benannt sind so wie zB.

 string m_Name = string.Emty;

Das ist ein sinnvolle und sehr gebräuchliche Variante 😉

Darum wird wie in VS 2005 der Programmierer immer etwas selbst dazu beitragen müssen 😉 Auch dei Stelle WO im Code die Properties eingefügt werden sollen, kann der Programmierer ab der BETA2 wählen.

Vielen Dank aber nochmals für den konstruktiven Vorschlag

TOM

23.08.2004 - 06:34 Uhr

Hallo maxE,

vielen Dank für Deine Anregungen 😉 Werde natürlich versuchen so viel wie möglich an Komfort einzubauen bis das Visual Studio 2005 fertig ist. 1 Jahr kann noch lang sein. Das Codemodel des VS .NET 2003 ist sehr komplex und gleich für 4 Programmiersprachen. Bissher wird zum Bsp. Nur für C# die Methode AddProperty unterstützt. Dabei musste ich sie auch noch so weit aufbohren das das Field im Property mit drinnen steht. Ist aber sehr interessant mit dem Codemodel und der IDE von VS .NET 2003 zu arbeiten.

Also ich hoffe das ich nicht so viele Bugberichte bekomme und somit schnell eine BETA 2 rausbringen kann

PS: das Implementieren von Interfaces und das Überschreiben von virtuellen Methoden ist in Visual Studio .NET 2003 schon automatisiert 😉 (PressTAB to implement Interface- Methods etc.)

TOM

22.08.2004 - 22:35 Uhr

Habe gerade nochmals das Setup in einer neuen Version auf den Server gelegt. Die alte hatte einen Fehler verursacht.

22:35 Uhr.

TOM_MUE

22.08.2004 - 21:49 Uhr

Servus,

für das Visual Studio .NET 2003, habe ich ein Add-in geschrieben. Dieses Add-in ermöglicht eine einfache und automatische Erstellung von Properties unter C#. Über ein Kontextmenu- Eintrag können nun zu jedem Class- Field "Getter" / "Setter" oder "Getter-Setter" erstellt werden. Das Add-in ist Freeware und eine Verteilung an Dritte ist erwünscht. Fehler oder Verbesserungswünsche bitte hier an mich posten.

Download und Screen unter www.tom-mue.de

23.05.2004 - 13:00 Uhr

Hallo @acid

greife über den Index der Buttons der Toolbar und deren ImageIindex auf das Icon zu.



(m = Member / tb = ToolBar / MainForm = Hauptformular/ nur zur Erklärung ;o))

this.m_tbMainForm.Buttons[1].ImageIndex = 2;


HTH

TOM_MUE

21.05.2004 - 14:39 Uhr

Sorry ich meinte eigentlich "Didii" aber auch nicht anschnautzend! Es ist nur so das man sich auch in gewisse Themen einlesen muss und nicht nur rumbasteln kann.

@maxE: 👍 Finde es ja sehr gut wenn Aternativen gezeigt werden 😉

TOM_MUE

21.05.2004 - 14:08 Uhr

http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/vsintro7/html/vbtskCreatingOrAddingSetupProject.asp

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Das Setup-Project von Visual Studio ist Kinderleicht.

Sorry aber etwas lesen wirst Du schon müssen.

TOM_MUE

21.05.2004 - 13:49 Uhr

Jedenfalls nicht am Projekt 😉

kann sein das der Installer des Studios etwas nachziehen möchte was mit der Option "Bei erster Verwendung installieren" installiert wurde.

TOM_MUE

21.05.2004 - 12:12 Uhr

Hallo,

@Frankenstein: wenn Du mit Visual Studio 2003 arbeitest hast Du die Möglichkeit das "BootStrapper- Plug-in" zu verwenden. Über dieses Plug-in kannst Du angeben ob das Framework nachinstalliert werden soll wenn es nicht auf dem Rechner vorhanden ist.

http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=600435

Wenn Du aber noch mit dem 2002er Studio arbeitest, musst Du Dir wohl oder übel eine Routine einfallen lassen die das auf Skripbasis löst (was ja nicht schwer ist).
Möglich wäre ja eine Autostart- Datei auf CD die du verteilst. Die als erstes ein Skript startet das in der Regristry nachschaut ob das Framework schon installier ist oder nicht.

@Didii

Ein Setupprojekt hat viele Eigenschaften über die ich die Möglichkeit habe, Aufgaben vor nach oder wärend der Installation durchführen zu lassen. Die Eigenschaft heist so meine ich auch "Benutzerdefinierte Aktionen". Du hast auch die Möglichkeit dem Setupprojekt eine "InstallerClass" hinzu zu fügen. Die Klasse wird vom Setup automatisch angesprochen und Du hast in den Events der Installer-Class (Die ewerden durch das Interface verlangt) die Möglichkeit programmatisch Aktionen zu starten.

Hier wäre in der MSDN ein guter Einstieg:

http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/vsintro7/html/vbtskCreatingOrAddingSetupProject.asp

HTH

TOM_MUE

19.05.2004 - 16:24 Uhr

Hallo @Didii

probiere es mal über den Pfad des Unterverzeichnis!

HTH

TOM_MUE

19.05.2004 - 16:23 Uhr

Hallo @Didii

über das Property: "StartPosition" des jeweiligen Form kannst Du die festlegen wo es beim Start zu sehen sein soll. Mögliche Positionen:



this.StartPosition = FormStartPosition.CenterScreen;
//oder
this.StartPosition = FormStartPosition.CenterParent;
//oder
this.StartPosition = FormStartPosition.Manual;
//oder
this.StartPosition = FormStartPosition.WindowsDefaultBounds;
//oder
this.StartPosition = FormStartPosition.WindowsDefaultLocation;

HTH

TOM_MUE

19.05.2004 - 15:47 Uhr

Hallo @pee

Über die Klasse "Process" aus dem Namespace System.Diagnostics-Namespace kannst Du den Process angeben den Du starten möchtest. Über die Klasse "ProcessStartInfo" im selben Namespace legst Du die Argumente fest die zu übergeben sind.



ProcessStartInfo m_ProcessStartInfo = new ProcessStartInfo("cmd.exe","/c TREE /s");
m_ProcessStartInfo.WorkingDirectory = @"C:\";			
m_ProcessStartInfo.UseShellExecute = false;
m_ProcessStartInfo.RedirectStandardOutput = true;
m_Process = new Process();			
m_Process.StartInfo = m_ProcessStartInfo;
m_Process.StartInfo.CreateNoWindow = true;
m_Process.Start();

string m_String = aProcess.StandardOutput.ReadToEnd();
m_FilePathName = @"C:\Inhalt.txt";
StreamWriter m_StreamWriter = new StreamWriter(this.m_FilePathName);
m_StreamWriter.Write(aString);
m_StreamWriter.Close();


Mit diesem CodeSnipped leitest Du den TREE- Stream vom StandartOutput (Monitor) in eine TextDatei um, ohne das DU dabei die Console siehst.

HTH

TOM

18.05.2004 - 13:41 Uhr

Hallo @Didii

Jedes Form hat die Properties :

MaximumSize,
MinimumSize.

Damit kannst Du festlegen wie groß oder klein ein Form gezogen werden darf. Legt man für beide den gleichen Wert fest, so ist das Form unveränderbar in seiner Größe (jedenfalls von dem Programmbenutzer). Programmatisch kannst Du es aber jder Zeit mit "new Size(..,..)" verändern.


this.MaximumSize = new Size(100,100);
this.MinimumSize = new Size(100,100);

HTH

TOM

13.05.2004 - 12:25 Uhr

Hallo @impact

das wichtigste ist nach meiner Erfahrung ein gutes Pflichtenheft nach dem Du programmieren kannst. Durch ein Pflichtenheft sollten alle Einzelheiten des Projektes erläutert sein so das man immer wieder nachschlagen kann welche Punkte in welchem Projektbereich maßgebend sind. Zur Übersichtlichkeit Deines Codes trägst Du in erster Linie selber bei! Wichtigstes Thema dabei ist immer eine aufschlussreiche Kommentierung und Dokumentierung. Sie sollte stätig mitgepflegt werden und nicht erst am Ende eines Projektes nachgezogen werden. Das ist ein ganz großes A und O!! Erstelle eigene Skribbels wie Deine Komponenten zusammenwirken sollen und erstelle Dir für jede Komponente einen Plan der Methoden, Fields, Interfaces, Properties, Events, Delegates etc. Für best practices kann ich Dir folgende Links empfehlen:

http://www.idesign.net/idesign/DesktopDe...index=0&tabid=1

http://msdn.microsoft.com/architecture/

Das hört sich sehr umfangreich an und wird vielleicht erst mal ein "Och nööööö" hervorzaubern 😉

Kann Dir aber versichern das es einen guten Überblick über Dein Projekt gibt und ich selbst arbeite auch schon sehr lange nach diesem Prinzip. Habe gerade ein Projekt (neben den beruflichen Projekten) das ca. 1/2 Mannjahr groß ist. Ohne meine angesprochene Vorgehensweise hätte ich da sicher schon den Überblick verlohren. Ein Satz aus der Professionellen Programmierung:

"Je später der Code geschrieben wird, um so besser funktioniert das Projekt" Also lass Dir in der Vorbereitung und Dokumentierung Zeit und schreibe nicht gleich wie ein wilder los 😉

HTH

TOM_MUE

13.05.2004 - 10:49 Uhr

Hi @MitchAndi

Kannst Du Deine Frage etwas umformuliere. Eine ImageList (wen Du das Control aus der ToolBox des VisualStudio meinst) hat keinen Button.
Auf die einzelnen Bilder einer ImagList kannst Du über deren Index zugreifen BSP:



this.m_ilSmallList.Images[0];


HTH

TOM_MUE

13.05.2004 - 09:44 Uhr

Hi @Theran,

es ist schon möglich ein Form in einem anderen Control oder Form darzu stellen 😉
Wichtiges Property ist dafür das "TopLevel"- Property. Schaltest Du das auf false, ordnet sich das Form einem Control oder anderem Form unter. BSP:


...

private System.Windows.Forms.Panel m_ControlPanel;

private ChildForm m_ChildForm = null;

...

private void m_btnViewChildForm_Click(object sender, System.EventArgs e)
{
     if(this.m_ChildForm == null)
       {
	this.m_ChildForm = new ChildForm();
	this.m_ChildForm.TopLevel = false;
	this.m_ChildForm.Parent = this.m_ControlPanel;
	this.m_ControlPanel.Controls.Add(this.m_ChildForm);
	this.m_ChildForm.Location = new Point(10,10);
       }

       this.m_ChildForm.Show();
       this.m_ChildForm.BringToFront();
}

Hoffe das Dir das weiterhilft

TOM_MUE

12.05.2004 - 12:12 Uhr

Füge dem Form das nicht ohne Abfrage geschlosse werde soll folgendes (Code ist nur ein mögliches Beispiel) hinzu:


private void MainForm_Load(object sender, System.EventArgs a_EventArgs)
		{
			this.Closing += new CancelEventHandler(MainForm_Closing);
		}

		private void MainForm_Closing(object sender, CancelEventArgs a_CancelEventArgs)
		{
			if(MessageBox.Show("Möchten Sie das Programm wirklich beenden?","Programm beenden?",MessageBoxButtons.YesNo,MessageBoxIcon.Information) == DialogResult.Yes)
			{
				a_CancelEventArgs.Cancel = false;
			}
			else
			{
				a_CancelEventArgs.Cancel = true;
			}
		}

HTH

TOM_MUE

11.05.2004 - 16:00 Uhr

Als erstes BITTE KEINE ANFRAGEN AN MEINE PRIVATE MAILADRESSE!

Auch wenn Du neu in der OOP und der Sprachsyntax C# bist bleibt Programmieren immer noch Programmieren! Du wirst Dir schon die Mühe machen müssen und in der MSDN oder unter PInvoke.net nach zu lesen was die Methoden machen. Dein letztes Beispiel hat Dich nur bis zum ersten Drittel des Zeiles gebracht!
"SHGetFileInfo" gibt dir das auf dem jeweiligen BS registrierte FileIcon zurück. Bei einer DLL wird es immer oh Wunder das Zahnrädchen bleiben. Meiner einer hat Dir schon ein riesen Sample gegeben in dem Du die Icons einer DLL auslesen kannst und dabei auch einen Index übergben kannst / musst. Also nutze in dem Falle "ExtractIconEx"! So und nun sei nicht wieder beleidigt das Du keine komplette Lösung bekommen hast 😉 !

HTH

TOM_MUE

11.05.2004 - 12:26 Uhr

Junge Du pinselst nur ab! Das wird Dich nicht weiterbringen. Natürlich kommt diese Fehlermeldung da ich ein new Icon erzeuge und dann das Icon.FromHandle(...) so nicht funktioniert. Klar es war mein Schreibfehler aber Du solltest Dir auch den Code zum Verstehen mal ansehen und selber mal etwas probieren und nachlesen wenn mal etwas nicht funktioniert! Ein fertig geschmiertes Brötchen wirst Du hier nicht finden. Aber Kopf hoch es ist noch kein Meister vom Himmel gefallen, nur halt mit reinem Abschreiben funktiniert auch in Zukunft nix ;o)

TOM_MUE

11.05.2004 - 11:46 Uhr

Was Du brauchst ist ein DllImport:


[DllImport("shell32.dll")]
 static extern uint ExtractIconEx(string szFileName, int nIconIndex,
   [Out] IntPtr [] phiconLarge, [Out] IntPtr [] phiconSmall, uint nIcons);

Das habe ich in 10 sec. unter Google gefunden!!!!!

http://www.google.ch/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&q=+%22ExtractIconEx%22+group%3Adotnet

Da ich mal ganz stark vermute das das für Dich Neuland ist solltest Du Dich mit "DllImport" und dessen Risiken beschäftigen! Infos in der MSDN und unter www.Pinvoke.net

Was zum Henker machst Du denn mit :

"'System.Drawing.Icon.FromHandle(System.IntPtr)' deutet auf 'Methode' hin, wo 'Klasse' erwartet wurde"

?????????

TOM_MUE

11.05.2004 - 11:20 Uhr

Dann bekommst Du doch alles was Du brauchst. Besser geht es doch nicht.

Gruß

TOM_MUE

11.05.2004 - 11:03 Uhr

Oh ja da habe ich übersehen das Du ja auc aus einer .dll die Icons auslesen möchtest.

Aus einer .dll kannst du die Icons über "ExtractIconEX" auslesen. Hier mal ein Beispiel für die "shell32"


void FillImageList()
        {
            imlist  =   new ImageList();
            string syspath  =   Environment.SystemDirectory;
            int n   =   ExtractIconEx( syspath + @"\shell32.dll",
        -1, null, null, 0);
            IntPtr[]    tabLargeIcon    =   new IntPtr[1];
            IntPtr[]    tabSmallIcon    =   new IntPtr[1];

            // geschlossener Ordner - ID 3
            n   =   ExtractIconEx( syspath + @"\shell32.dll", 3,
        null, tabSmallIcon, 1 );
            Icon ic =   Icon.FromHandle( tabSmallIcon[0]);
            imlist.Images.Add( ic );

            // offener Order - ID 4
            n   =   ExtractIconEx( syspath + @"\shell32.dll", 4,
        null, tabSmallIcon, 1 );
            ic  =   Icon.FromHandle( tabSmallIcon[0]);
            imlist.Images.Add( ic );

            // Floppy - ID 6
            n   =   ExtractIconEx( syspath + @"\shell32.dll", 6,
        null, tabSmallIcon, 1 );
            ic  =   new Icon.FromHandle( tabSmallIcon[0]);
            imlist.Images.Add( ic );


            // HDD - ID 8
            n   =   ExtractIconEx( syspath + @"\shell32.dll", 8,
        null, tabSmallIcon, 1 );
            ic  =   Icon.FromHandle( tabSmallIcon[0]);
            imlist.Images.Add( ic );

            // CD-ROM - ID 11
            n   =   ExtractIconEx( syspath + @"\shell32.dll", 11,
        null, tabSmallIcon, 1 );
            ic  =   Icon.FromHandle( tabSmallIcon[0]);
            imlist.Images.Add( ic );
        }

Bedenke Du brauchst immer den Pfad zur .dll!

HTH

TOM_MUE

11.05.2004 - 09:40 Uhr

Warum?

sollte eigentlich gut funktionieren. Was ist denn das Problem?

TOM_MUE

11.05.2004 - 09:06 Uhr

Hallo @-acis-

untested:


using System.Runtime.InteropServices;
using System.Reflection;

[DllImport("shell32.dll")]
public static extern IntPtr ExtractAssociatedIcon(IntPtr hInst,string
lpIconPath,int lpiIcon);

public Icon ExtractAssociatedIcon(string filename)
{
    IntPtr hInstance =
Marshal.GetHINSTANCE(Assembly.GetEntryAssembly().GetModules()[0]);
    IntPtr hIcon = ExtractAssociatedIcon(hInstance, filename, 0);
    return Icon.FromHandle(hIcon);
}

HTH

TOM_MUE

11.05.2004 - 08:49 Uhr

Für das dynamische Erstellen brauchst Du nur eine Form von Schleife. Nehmen wir mal der Einfachheit halber die „for“- Schleife.
Von der Überlegung solltest Du so ran gehen:

  1. Wo bekomme ich meine Icons her à Aus der Registry.
  2. Wie viele Icons kommen an der Stelle vor (Mit einer zweiten vorschleife den Count ermitteln)
  3. Welches Object möchte ich mit den Icons bestücken à Deine ImageList.

Das ist nur eine sehr einfache Variante die es noch zu optimieren gilt. In der zweiten for- Schleife die den Count besitzt, fügst Du einfach je ein Icon der Imagelist hinzu (beachte dabei mit welcher Größe Du Deine ImageList definiert hast 16x16, 32x32 etc.!)

for(…;…;…)
{

m_ imlIconList.Images.Add(new Icon(@”C:\icon.ico”);  

}

HTH

TOM_MUE

07.05.2004 - 17:13 Uhr

Gehe ich richtig in der Annahme das Du abfragen möchtest, ob der Programmbenutzer volle Schreibrechte hat oder gar der Administrator ist? Grundsätzlich sollte darauf verzichtet werden Programme so zu schreiben das sie nur mit Administratorrechten laufen. Das würde Dir mit Sicherheit ab SP2 von Xp das Genick brechen. Nutze die Anwendungs- Verzeichnisse über die Environment aus dem .NET Framework. Darüber erhältst Du auch die „Eigenen Dateien“ des jeweils angemeldeten Benutzers. In den Verzeichnissen der anderen nicht angemeldeten Benutzer hast Du dann eh nix zu suchen, machst Du es doch stellst Du damit eine Potentielle Sicherheitslücke dar.

HTH

TOM_MUE

07.05.2004 - 10:53 Uhr

Hier die Dll:



using System;

namespace HelloWorldNamespace
{
	
	public class HelloWorldClassLibrary
	{
		public static void SayHelloWorld()
		{
			Console.WriteLine("Hello World");
		}
	}
}

Dann im SolutionExplorer der Solution die die .dll verwende soll einen Verweis auf die .dll hinzufügen und dann kannst Du sie wie folgt verwenden:


using System;
using HelloWorldNamespace;

namespace DllTestNamespace
{
	
	class CSharpDllHostClass
	{
		
		[STAThread]
		static void Main(string[] args)
		{
			HelloWorldClassLibrary.SayHelloWorld();
		}
	}
}

HTH

TOM_MUE

04.05.2004 - 15:09 Uhr

m_btnClose --> z.B: für einen Button der etwas Schließt.

m_lblInfoText --> z.B: für ein Label das eine Information enthält.

m_cbDaysOfWeek --> ComboBox die Wochentage enthält.

m_lbMembers --> ListBox mit Membern.

m_lvFiles --> ein ListView das mit Dateien gefüllt ist.

Und und und ;o)

TOM_MUE

04.05.2004 - 14:49 Uhr

Hi @atmosfear,

Juval Löwy hat an C# mitgearbeitet und gibt auf seiner Internetseite "best practices" zu C# und .NET. Dazu gehören auch "naming conventions"

http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=0&tabid=1

Dort solltest Du Dir mal das PDF für die "programming standarts" ansehen (rechts Oben auf der website der rote Link "Standard")!!

Aus eigener Erfahrung im prof. Programmiergeschäft kann ich Dir nur anraten dich auf EINE Art der "naming convention" ein zu arbeiten (bitte keinen Wechsel ;o)). Microsoft hat dazu auch viele wichtige und interessante Berichte, Richtlinien auf seiner Homepage:

http://msdn.microsoft.com/architecture/

veröffentlicht. Kram ist das sicher nicht!! Eine gut gewählte (ich bevorzuge die von Juwal Löwy/ Microsoft) "naming convention" kann Dir beim Programmieren viel Zeit ersparen. Damit aber in 5 Jahren neue Mitarbeiter auch mit deinem Code arbeiten können solltest Du eine saubere und konsequente Dokumentierung und Kommentierung des Codes handhaben!!! Die "naming convention" ist nur so gut wie die Dokumentation und Kommentierung!

HTH

TOM_MUE

28.04.2004 - 07:59 Uhr

Hallo @marloto

die Lösung für ein flackerfreies Zeichne liegt im so genannten "Gepufferten" Zeichnen. Was bedeutet das? OK stell Dir vor Du möchtest Dir ein WinControl programmieren welches einen Farbverlauf hat. Dazu erstellst Du dir eine Klasse die von System.Windows.Forms.Control erbt. Dann überschreibst Du die OnPaint. In der OnPaint erzeugst Du (aber nur wenn es noch null ist) ein neues Bitmap. Dann holst du dir ein Graphics- Object von dem Bitmap:



Graphics l_BitmGraphicsObj = Graphics.FromImage(m_Bitmap);


Dann zeichnest Du mit dem l_BitmGraphicsObj den Farbverlauf (in ein Rectangle) und zum Schluss ruhfst Du über das Argument (PaintEventArgs a_PaintEventArg, welches der OnPaint übergeben wurde)


a_PaintEventArg.Graphics.DrawImage(m_Bitmap);


auf!
Damit übergibst Du ein fertiges Bild (eventuell mit Farbverlauf) wobei das erstellen des Bildes (Farbverlaufes) nicht sichtbar ist. OK jetzt kommt aber noch das Problem das es immer noch flackert da Du ja in der OnSizeChange(..); ein Invalidate und oder ein Refresh(); aufrufen solltest. Überschreibe einfach die OnPaintBackground(...), und mach in ihr NIX!!! Ruf auch kein base auf. Damit ereichst Du das der Hintergrund (interessiert Dich nicht da Du ja nur das Bitmap in der Farbgebung neu zeichnest) nicht neu mitgezeichnet wird und du hast das Flackern besiegt!

HTH

Web:

http://www.c-sharpcorner.com/Graphics.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskdrawingtextwithgdi.asp

http://www.syncfusion.com/FAQ/WinForms/FAQ_c3c.asp (Ist ne sehr geile Seite)

TOM_MUE

24.04.2004 - 09:02 Uhr

Hallo @ Drache

hier noch die Homepage von Michael Willers (sehr geniale Samples auf der Seite).

http://www.devcoach.de/default.htm

TOM_MUE

24.04.2004 - 08:53 Uhr

Hallo @Drache,

schau mal in der MSDN nach der "AutoResetEvent --> Class" die benachrichtigt einen wartenden Thrad über das Ende eines anderen Threads. Hier ein Beispiel zu posten wäre einfach zu komplex darum rate ich Dir gehe mal in der deutschen MSDN Bibliothek auf die Suche nach dem Artikel von Michael Willers über Asynchrone Threads!! Leider ist die Bibliothek gerade off. Sonnst hätte ich Dir den Link gepostet. (Der Willers hat aber so meine ich auch ne eigene Page, GOOGLE einfach mal)

Vielo Spass

TOM_MUE

EDIT: Habe den Artikel gerade gefunden

http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=495413

22.04.2004 - 22:38 Uhr

Hallo @Brain

aus Deiner Frage geht nicht heraus ob Du Fenster eines anderen Prozesses meinst oder ien Fenster im selben Prozess. Wäre ein entscheidener Hinweis um Dir zu helfen ;o)

Gruß

TOM_MUE

22.04.2004 - 13:09 Uhr

Hallo,

Danke für deine schnelle Antwort aber den Helpbutton meinte ich nicht. Es soll ein Benutzerdefinierter Button sein der z.B: für das Minimieren zum NotifyIcon stehen soll. Einfach eine beliebige 4. Funktion.

Gruß

TOM_MUE

22.04.2004 - 12:36 Uhr

Hallo,

hat von euch schon mal einer ein TUT gefunden oder weiß selber wie ich in der Titelleiste eines Fensters einen 4. Button hinzaubern kann 😉 Leider habe ich bei den API Funktionen noch nix gefunden könnte mir aber vorstellen das ich vielleicht über WndProc gehen muss?!

Vielen Dank

TOM_MUE