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 Stu42
Thema: MDI "X" Button - Keine Childs schließen
Am im Forum: GUI: Windows-Forms

ich weiß nicht ganz was du meinst.

Wenn ich statt meinem normalen EventHandler , meinen Code in:

protected override void OnClosing(CancelEventArgs e)

schreibe, dann passiert das gleiche, also die Childs werden noch geschlossen.

Selbst wenn ich das Event komplett ignoriere mit:

protected override void OnClosing(CancelEventArgs e)
{
// base.OnClosing(e);
}

dann werden sie immer noch geschlossen.

Thema: MDI "X" Button - Keine Childs schließen
Am im Forum: GUI: Windows-Forms

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing);

ja, der ist richtig regestriert.
Das die MDI-Childs geschlossen werden, müsste aber bereits vor dem OnClosing Event passieren, da sie schon weg sind, wenn das EventAufgerufen wird.

Thema: MDI "X" Button - Keine Childs schließen
Am im Forum: GUI: Windows-Forms

Hallo,

ich habe eine MDI Form, mit verschiedenen Formen drin. Wenn ich das Programm verlassen will, möchte ich vorher einige Abfragen machen. Diese Abfragen machen ich in dem OnClosing Event. Das Problem dabei ist, dass für jedes mal klicken auf den "X" (Exit butten der Form) eine Form in der MDI-Form geschlossen wird, auch wenn ich bei den Event Argumenten "e.Cancel = true" mache.

Wie kann ich das nun verhindern, dass meine Formen in der MDI-Form geschlossen werden, wenn ich auf das "X" drücke?


Gruß Stu

Thema: Ein seltsamer Fehler
Am im Forum: Rund um die Programmierung


BOOL CWnd::DestroyWindow()
{
	CWnd* pWnd;
	CHandleMap* pMap;
	HWND hWndOrig;
	BOOL bResult;

	if ((m_hWnd == NULL) && (m_pCtrlSite == NULL))
		return FALSE;

	bResult = FALSE;
	pMap = NULL;
	pWnd = NULL;
	hWndOrig = NULL;
	if (m_hWnd != NULL)
	{
		pMap = afxMapHWND();
		ENSURE(pMap != NULL);
		pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
#ifdef _DEBUG
		hWndOrig = m_hWnd;
#endif
	}

#ifdef _AFX_NO_OCC_SUPPORT
	if (m_hWnd != NULL)
		bResult = ::DestroyWindow(m_hWnd);
#else //_AFX_NO_OCC_SUPPORT
	if ((m_hWnd != NULL) || (m_pCtrlSite != NULL))
	{
		if (m_pCtrlSite == NULL)
			bResult = ::DestroyWindow(m_hWnd);
		else
			bResult = m_pCtrlSite->DestroyControl();
	}
#endif //_AFX_NO_OCC_SUPPORT

	if (hWndOrig != NULL)
	{
		// Note that 'this' may have been deleted at this point,
		//  (but only if pWnd != NULL)
		if (pWnd != NULL)
		{
			// Should have been detached by OnNcDestroy
#ifdef _DEBUG
			ASSERT(pMap->LookupPermanent(hWndOrig)    == NULL);
#endif
		}
		else
		{
#ifdef _DEBUG
			ASSERT(m_hWnd == hWndOrig);
#endif
		// Detach after DestroyWindow called just in case
			Detach();
		}
	}

	return bResult;
}


Zeile 1007:
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);

Thema: Ein seltsamer Fehler
Am im Forum: Rund um die Programmierung

Hallo,

ich habe ein MFC ActiveX, welches ich auf einer Form habe. Diese Form ist ausgeblendet, also "Hide()". Doch wenn ich mein Programm beende, und das Fenster noch versteckt ist, dann bekomme ich eine "Debug Assertion"-Fehlermeldung. Die Fehlermeldung kommt aber nur für ca. 1 sekunde, und geht dann selbständig zu.

Doch wenn ich das Programm beende, wärend das Fenstet angezeigt wird, dann bekomme ich diese Fehler nicht.

Der Fehler kommt auf nur, wenn ich das Programm nicht im Debug-Modus ausführe. Also ich Debug-Modus läuft es fehlerfrei.

Woran könnte das liegen? Könnte es ein Timing-problem bei der destruktion sein ?

Gruß Stu

[Edit]
Ich hab den Fehler mit nem Screnn mal eingefangen:

Thema: DC eines ActiveX als Image
Am im Forum: GUI: Windows-Forms

ja das hab ich mir auch schon gedacht. Aber dann müsste ich in das ActiveX ne funktion einbauen, die mir das HANDEL auf den DC zurückgibt.

Oder gibs da schon ne Funktion in C# mit der ich von einer Form dn DC bekomme?

[Edit]

Ich hab den DC nun ermittelt.

Aber wenn ich nun folgendes mache:

Graphics g = MyAX.GetHC();
Bitmap b = new Bitmap(200,200,g);

b.Save("C:\\bla.bmp");

dann ist das Bitmap weiß, also kein inhalt.

Auf dem DC vom AX kann ich aber Zeichhen.

Woran kann das liegen, das dass Bitmap komplett weiß ist?

Thema: DC eines ActiveX als Image
Am im Forum: GUI: Windows-Forms

Hallo,

ich mächte den Inhalt des DC eines ActiveX´es auf einern Button setzen.

Wie konvertiere ich den DC eines Controls als am bester als Image oder Bitmap?

Gruß Stu

Thema: MouseLeave wird ungewollt ausgelöst!
Am im Forum: GUI: Windows-Forms

Cursor.Hide();

könnte es nicht sein, das davon das MouseLeave event ausgelöst wird?

Thema: Erweiteter CommonDialog
Am im Forum: GUI: Windows-Forms

ah super, so etwas hab ich gesucht, vielen dank.

Thema: Erweiteter CommonDialog
Am im Forum: GUI: Windows-Forms

Hallo,

ich hätte gerne einen FileDialog, dem ich noch weitere eigenschaften hinzufüge kann. Also mit einer Vorschau und nen paar Knöpfen.

Nur, wie baue ich dem CommonDialog bzw dem FileDialog noch Controls an?

Ich kann den CommonDialog ja nur modal anzeigen lassen, und der er kein Control ist , kann ich ihn auch nicht als Controls in eine Form einfügen.

Jemand eine Idee, wie ich nem CommonDialog nun weitere eigentschaften hinzufüge, oder komme ich nicht umher mir einen eigenen zu basteln?

Gruß Stu

Thema: Automatische Formatierung bei DataGridView Eingabe
Am im Forum: GUI: Windows-Forms

Hallo,

in nem DataGridView kann man ja die Formatierung einstellen, z.B. auf ne Zahl mit 2 Nachkommestellen. Doch wenn ich nun was Eingabe, wird trozdem nicht Formatiert. Nun hab ich hier schon im Forum gelesen, dass man die Formatiertung selber mit dem Event CellParsing machen kann.


Nun meine Frage:

Kann man das Grid nicht so einstellen, dess es die Werte Automatisch COnvertiert bei einer Eingabe?

Gruß Stu

Thema: Größe von .NET Programmen
Am im Forum: Rund um die Programmierung

Hallo,

als ausführbare Datei sind die .NET Pogramme ja nur seht klein. Aber ausgeführt sind die ja riesig... Mein Programm besteht aus aus nem MFC .ocx und nen paar dlls und ist mal eben so 26 mb im speicher. Mir ist auch aufgefallen, das wenn ich mir z.B. eine Kernel Funktion via DllImport einbinde, dann wächst das Programm beim einbinden der DLL um ca 6 MB.

Naja das ist ja auch irgentwie verständlich das .NET programm größer sind, wahrscheinlich werden da wohl alle .NET dlls eingebunden. Aber 26 MB ist schon derbe.

Selbst eine noch jungfreuliche anwendung ist mal eben so 11mb groß,

Weiß jemand warum die Programme sich im Speicher so ausdehnen?
Oder mache ich vieleicht irgentetwas falsch?

Gruß Stu

Thema: Fehler aus Rücksprung einer DLL Callback Funktion
Am im Forum: Rund um die Programmierung

ahso ist das, dann kommt der also durcheinander weil er die Variablen falsch vom Stack abruft.

jau funktionieren tut es mit:


extern "C"  void __stdcall Call( void __stdcall Event(int i) )
	{
		Event(1337);
	}


derbe, danke für die antwort!

Thema: Fehler aus Rücksprung einer DLL Callback Funktion
Am im Forum: Rund um die Programmierung

PS.: Ich benutzer nur die LoadLibrary Funktionen, weil ich den DLL Namen erst zur laufzet kenne, und beim DllImport kann ich ja keinen variablen string zur laufzeit angeben.

Thema: Fehler aus Rücksprung einer DLL Callback Funktion
Am im Forum: Rund um die Programmierung

Hallo,

das leidige Thema DLL, ich werds einfach nicht los . Aber diesmal habe ich code!

Ich habe in meinder nativen C Dll folgende Funktion:


extern "C" void Call( void Event(int i) )
{
        Event(42);
}
 

Diese möchte ich nun dynamisch in meinem C# Programm aufrufen, also deklariere ich mir ersteinmal die Library Funktionen aus der kernel32.dll

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr LoadLibraryW(string filename);

[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr GetProcAddress(IntPtr hMod, string ProcName);

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool FreeLibrary(IntPtr hModule);

und dann natürlich noch, den delegaten für die Funktion Call aus der DLL.

delegate void Event(int i);    // der paramter derCall- Funktion
delegate void Call(Event e); //funktion aus der dll

Um die funktion dann aufzurufen mache ich dann Folgendes:


//.....
//die callback funktion
public void MyCall(int i)
 {
         MessageBox.Show(i.ToString());
  }
//........
//der aufruf
IntPtr hMod = LoadLibraryW("c:\\test.dll");
IntPtr proc1 = GetProcAddress(hMod, "Call");
Call c = (Call) Marshal.GetDelegateForFunctionPointer(proc1, typeof(Call));
Event ev = MyCall;
c(ev);
 FreeLibrary(hMod);



Die Methode MyCall wird nun auch aufgerufen, also die MessageBox kommt, aber beim Rücksprung der Funktion bekomme ich folgende Debug-Fehlermeldung:

//--Message
Debug-Error!

Programm: ...
Module: C:\test.dll
File:

Runtime Check Error #0: The value ESP was not properly saved across a funktion call. This is usally a result of calling a funktion declared with one calling convertion with a function pointer declared with a diffrent calling convertion.
//----------

Hab ich da einen falschen delegaten genommen? denn der Callbackfunktion in der Dll lautet ja "void Event(int i)" und der delegate "delegate void Event(inti i)", also eigentlich das selbe.

Hat jemand eine Ahnung woran das liegen könnte?

Hilfe!
Gruß Stu.

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

CRT ... so heißt das gar nicht. Das was ich gemacht macht ist ne CRL-Klassenbibelothek, welche ich als schnittstellen DLL benutze.
Aber ich werde das ganze wohl umschreiben müssen.

Die GetDelegetaForFunktionPointer Fuktion hab ich mir schon angeschaut, und gegoogelt .
Den Parameter Type t versteh ich aber nicht so ganz, was soll ich dafür einsetzen? Doch irgentwie die Parameterliste oder?

In der .NET Framework Doku steht nur:
"t: Der Typ des zurückzugebenden Delegaten. "

Thema: [.NET] Forms als Childs..
Am im Forum: GUI: Windows-Forms

mhh dann habe ich so eine art MDI.

naja das systemmenü wird man schon irgentwie ausblenden können.

Aber was mich nun mehr interessiert , ist, wie ich einen CommonDialog als Controll verwenden kann.

Jemand ne Ahnung?

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

könnte es sein dass das erst ab .Net Framework 2.0 geht?

[Edit]

ah ne, das funzt tatsächlich... hab die syntax nen bischen geändert.


Aber eine Frage hätt ich noch, wie rufe nen IntPtr Funktionszeiger auf?

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

ja ich muss halt DLL´s in meinen C# code einbinden. Diese DLL´s sind noch in C geschrieben (treiber für hardware etc...).

Und wie gesagt, über [DLLImport] konnt ich diese Funktionen der DLL nicht einbinden, da ich dort einen einsprungsfehler bekommen habe.

Und CRT-Libs kann ich so in C# einbinden, und in CRT libs kann ich halt die Funktion LoadLibrary aufrufen, desswegen der umweg. Naja vieleicht muss ich einfach weiter probieren, bestimmt hab ich beim DLL import was falsch gemacht...

Thema: [.NET] Forms als Childs..
Am im Forum: GUI: Windows-Forms

jau genau, eine Froms als Controll.

Könntet íhr mir da vieleicht ein Code beispiel geben?

Dann wenn folgendes mache:


Form2 myform = new Form2();
myform.TopLevel = false;
myform.Show();

dann passiert leider gar nichts.

Ursprünglich wollte ich mir einen erweiterten OpenDialog erstellen.
Meine Taktik:
Den OpenDialog nicht Modal aufrufen, sondern halt als ein Controll auf einer Form (damit ich noch anderes Controlls hinzubasteln kann).

Eine TopLevel Eigenschaft bei einem OpenDialog könnte ich leider auch nicht finden.

Thema: [.NET] Forms als Childs..
Am im Forum: GUI: Windows-Forms

muss ich dann sagen :

(ColorDialog1 as Form).MDIchildren = this`?

denn das funktioniert nicht? muss ich vorher nicht noch etwas machen?

Thema: [.NET] Forms als Childs..
Am im Forum: GUI: Windows-Forms

Hallo Leute,

da in der MFC alle Controlls von der Klasse CWnd abgeleitet sind, kann man dort sehr schön alle CWnd´s auch als Kindfenster erstellen.

Also kann ich mir dort z.B. ein StandartDialog in einem Dialog hineinladen, und somit noch einige erweiterungen einbauen.


Das müsste doch irgentwie auch mit den Forms gehen oder? So dass ich mir z.B. nen Standartdialog als Child ( also als Controll) in eine Form lade.

Bin über jede Hilfe dankbar.

Gruß Stu

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

mhh mit dem DLLImport muss ich wohl was falsch gemacht haben.

Denn da kahm bei mir "Ungültige einsprungs Adresse" oder so etwas.

Das Problem habe ich recht unschön gelöst, in dem ich mir in einer CRT-Klassenbibelotheck die zu Importierenden Funktionen mit LoadLibrary und GetProcAddress eingeladen hab. Und dieseCRT .dll binde ich dann in C# ein, indem ich sie als Verweis einbinde.

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

ja aber ich muss immer wieder C++ DLL´s einbinden, und da brauch ich halt zeiger, um die parameter der funktion bedienen zu können.

Wenn ich z.B. ne Dll funktíon hab die als parameter nen string in form eines char * benötigt... dann muss ich mir ja so nen Speicher reservieren, weil ich dort ja schlecht den string benutzen kann.

Oder DLL´s die speicherblöcken erzeugen und zurückgeben.

Und bei welchen anwendungen (ausser webzeugs) wird dann unsafe code verboten?

PS.: Gibs es eigentlich Nachteile davon, wenn ich unmaged DLL in manged code einbinde?

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

ach so geht ja, mhh ich hab das immer mit new probiert, aber da ging das irgentwie nicht.

vielen dank

Thema: Unsafe code....
Am im Forum: Rund um die Programmierung

hallo,

wie elementar kann man die pointer in C# benutzen? Also ich bin C++ programmierer der für die GUI´s C# benutzen will.

Konkret:
Kann man folgendes auch in C# umsetzen?


byte * bp = new byte[ 10 * sizeof(int) ];
int * ip = (int*) bp;
double * db = (double *) bp;


Also ob ich in C# mir speicherblöcke erzeugen kann, und dann beliebig mit verschieden pointertypen zugreifen kann?

Denn es kommt halt immerwieder vor, dass man bestimmte Formate aus einer Datei auslesen muss, und es ist/wäre halt einfach mit dem richtigen Struckturpointen denn den speicher auszulesen.

Gruß Stu