Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
avec DoDragDrop, aucune exception n'est récupérée.
Les lignes suivantes illustrent mes propos. Dans l'événement
je force une exception avec la ligne "int b=1/a" (donc le message After
Exception ne sera pas affiché). Pourquoi cette exception n'est pas catchée
using System;
using System.Windows.Forms;
public class Form2 : System.Windows.Forms.Form {
[STAThread]
static void Main() {
Application.Run(new Form2());
}
public Form2() {
this.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
this.DragDrop += new
System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
this.DragEnter += new
System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
this.AllowDrop = true;
}
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
private void Form2_DragEnter(object sender,
System.Windows.Forms.DragEventArgs e) {
e.Effect=DragDropEffects.Copy;
}
private void Form2_DragDrop(object sender,
System.Windows.Forms.DragEventArgs e) {
int a=0;
MessageBox.Show("Before exception");
int b=1/a;
MessageBox.Show("After exception");
}
}
Merci par avance,
Ludovic SOEUR
Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
avec DoDragDrop, aucune exception n'est récupérée.
Les lignes suivantes illustrent mes propos. Dans l'événement
je force une exception avec la ligne "int b=1/a" (donc le message After
Exception ne sera pas affiché). Pourquoi cette exception n'est pas catchée
using System;
using System.Windows.Forms;
public class Form2 : System.Windows.Forms.Form {
[STAThread]
static void Main() {
Application.Run(new Form2());
}
public Form2() {
this.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
this.DragDrop += new
System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
this.DragEnter += new
System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
this.AllowDrop = true;
}
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
private void Form2_DragEnter(object sender,
System.Windows.Forms.DragEventArgs e) {
e.Effect=DragDropEffects.Copy;
}
private void Form2_DragDrop(object sender,
System.Windows.Forms.DragEventArgs e) {
int a=0;
MessageBox.Show("Before exception");
int b=1/a;
MessageBox.Show("After exception");
}
}
Merci par avance,
Ludovic SOEUR
Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
avec DoDragDrop, aucune exception n'est récupérée.
Les lignes suivantes illustrent mes propos. Dans l'événement
je force une exception avec la ligne "int b=1/a" (donc le message After
Exception ne sera pas affiché). Pourquoi cette exception n'est pas catchée
using System;
using System.Windows.Forms;
public class Form2 : System.Windows.Forms.Form {
[STAThread]
static void Main() {
Application.Run(new Form2());
}
public Form2() {
this.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
this.DragDrop += new
System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
this.DragEnter += new
System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
this.AllowDrop = true;
}
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
private void Form2_DragEnter(object sender,
System.Windows.Forms.DragEventArgs e) {
e.Effect=DragDropEffects.Copy;
}
private void Form2_DragDrop(object sender,
System.Windows.Forms.DragEventArgs e) {
int a=0;
MessageBox.Show("Before exception");
int b=1/a;
MessageBox.Show("After exception");
}
}
Merci par avance,
Ludovic SOEUR
Vue générale;
http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
news:#kjg$
> Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
> avec DoDragDrop, aucune exception n'est récupérée.
> Les lignes suivantes illustrent mes propos. Dans l'événement
Form2_DragDrop,
> je force une exception avec la ligne "int b=1/a" (donc le message After
> Exception ne sera pas affiché). Pourquoi cette exception n'est pas
?
>
> using System;
> using System.Windows.Forms;
>
> public class Form2 : System.Windows.Forms.Form {
> [STAThread]
> static void Main() {
> Application.Run(new Form2());
> }
>
> public Form2() {
> this.MouseDown += new
> System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> this.DragDrop += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> this.DragEnter += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> this.AllowDrop = true;
> }
>
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
>
> private void Form2_DragEnter(object sender,
> System.Windows.Forms.DragEventArgs e) {
> e.Effect=DragDropEffects.Copy;
> }
>
> private void Form2_DragDrop(object sender,
> System.Windows.Forms.DragEventArgs e) {
> int a=0;
> MessageBox.Show("Before exception");
> int b=1/a;
> MessageBox.Show("After exception");
> }
> }
>
>
> Merci par avance,
> Ludovic SOEUR
>
>
>
Vue générale;
http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
--
Paul Bacelar
"Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
news:#kjg$8JKFHA.2772@TK2MSFTNGP14.phx.gbl...
> Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
> avec DoDragDrop, aucune exception n'est récupérée.
> Les lignes suivantes illustrent mes propos. Dans l'événement
Form2_DragDrop,
> je force une exception avec la ligne "int b=1/a" (donc le message After
> Exception ne sera pas affiché). Pourquoi cette exception n'est pas
?
>
> using System;
> using System.Windows.Forms;
>
> public class Form2 : System.Windows.Forms.Form {
> [STAThread]
> static void Main() {
> Application.Run(new Form2());
> }
>
> public Form2() {
> this.MouseDown += new
> System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> this.DragDrop += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> this.DragEnter += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> this.AllowDrop = true;
> }
>
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
>
> private void Form2_DragEnter(object sender,
> System.Windows.Forms.DragEventArgs e) {
> e.Effect=DragDropEffects.Copy;
> }
>
> private void Form2_DragDrop(object sender,
> System.Windows.Forms.DragEventArgs e) {
> int a=0;
> MessageBox.Show("Before exception");
> int b=1/a;
> MessageBox.Show("After exception");
> }
> }
>
>
> Merci par avance,
> Ludovic SOEUR
>
>
>
Vue générale;
http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
news:#kjg$
> Je ne comprends pas pourquoi quand une opération de drag/drop est lancée
> avec DoDragDrop, aucune exception n'est récupérée.
> Les lignes suivantes illustrent mes propos. Dans l'événement
Form2_DragDrop,
> je force une exception avec la ligne "int b=1/a" (donc le message After
> Exception ne sera pas affiché). Pourquoi cette exception n'est pas
?
>
> using System;
> using System.Windows.Forms;
>
> public class Form2 : System.Windows.Forms.Form {
> [STAThread]
> static void Main() {
> Application.Run(new Form2());
> }
>
> public Form2() {
> this.MouseDown += new
> System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> this.DragDrop += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> this.DragEnter += new
> System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> this.AllowDrop = true;
> }
>
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
>
> private void Form2_DragEnter(object sender,
> System.Windows.Forms.DragEventArgs e) {
> e.Effect=DragDropEffects.Copy;
> }
>
> private void Form2_DragDrop(object sender,
> System.Windows.Forms.DragEventArgs e) {
> int a=0;
> MessageBox.Show("Before exception");
> int b=1/a;
> MessageBox.Show("After exception");
> }
> }
>
>
> Merci par avance,
> Ludovic SOEUR
>
>
>
Merci pour l'article très interessant sur le débat toujours ouvert sur les
exceptions.
Cependant, le code que j'ai présenté avait pour but de montrer en quelques
lignes le problème. Il est clair que de toutes façons, il n'y a pas de
MessageBox dans mon code pendant le drag/drop.
Le vrai problème est que s'il y a effectivement un bug non prévu (appel à
une méthode d'un objet non instancié par exemple ou bien out of memory),
programme ne va pas afficher le message d'erreur de plantage de l'appli
laisser l'application se dérouler normalement comme si rien ne s'était
passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
après le plantage...et ca c'est très embêtant...
Vous me direz que je peux ajouter des tests de nullité de partout mais là
n'est pas le problème. Un simple "out of memory" peut m'envoyer le code en
l'air sans que j'en ai ni la connaissance, ni la cause et ni la
de faire marche arrière.
Mon but n'est pas de récupérer l'erreur mais de faire crasher
quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
lors d'un drag/drop.
Avez-vous une idée de ce qui pourrait être fait pour faire qqch de propre
Pour l'instant, j'utilise un patch qui fonctionne mais que ne me convient
pas.
J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type là
try {
......
} catch (Exception e) {
DragDropException=e;
}
avec bien entendu DragDropException une variable globale à la Form.
Et dans le code, j'utilise les lignes suivantes pour lancer une opération
drag/drop:
DragDropException=null;
DoDragDrop(this,DragDropEffects.All);
if (DragDropException!=null) throw DragDropException;
Ainsi, s'il y a un plantage de l'appli pendant une opération de drag/drop,
je peux récupérer le problème et faire planter l'appli. Seulement,
présentée précédemment utilise des try/catch alors que je suis sûr que
inutile et que l'on pourrait s'en passer...mais comment ?
Une idée ?
Merci par avance,
Ludovic Soeur.
"Paul Bacelar" a écrit dans le message
de news:d17vmm$n3c$
> Vue générale;
>
> http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
>
>
>
> Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
DargDrop.
>
>
> --
> Paul Bacelar
>
> "Ludovic SOEUR" wrote in message
> news:#kjg$
> > Je ne comprends pas pourquoi quand une opération de drag/drop est
> > avec DoDragDrop, aucune exception n'est récupérée.
> > Les lignes suivantes illustrent mes propos. Dans l'événement
> Form2_DragDrop,
> > je force une exception avec la ligne "int b=1/a" (donc le message
> > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
catchée
> ?
> >
> > using System;
> > using System.Windows.Forms;
> >
> > public class Form2 : System.Windows.Forms.Form {
> > [STAThread]
> > static void Main() {
> > Application.Run(new Form2());
> > }
> >
> > public Form2() {
> > this.MouseDown += new
> > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > this.DragDrop += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > this.DragEnter += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > this.AllowDrop = true;
> > }
> >
> > private void Form2_MouseDown(object sender,
> > System.Windows.Forms.MouseEventArgs e) {
> > DoDragDrop(this,DragDropEffects.All);
> > }
> >
> > private void Form2_DragEnter(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > e.Effect=DragDropEffects.Copy;
> > }
> >
> > private void Form2_DragDrop(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > int a=0;
> > MessageBox.Show("Before exception");
> > int b=1/a;
> > MessageBox.Show("After exception");
> > }
> > }
> >
> >
> > Merci par avance,
> > Ludovic SOEUR
> >
> >
> >
>
>
Merci pour l'article très interessant sur le débat toujours ouvert sur les
exceptions.
Cependant, le code que j'ai présenté avait pour but de montrer en quelques
lignes le problème. Il est clair que de toutes façons, il n'y a pas de
MessageBox dans mon code pendant le drag/drop.
Le vrai problème est que s'il y a effectivement un bug non prévu (appel à
une méthode d'un objet non instancié par exemple ou bien out of memory),
programme ne va pas afficher le message d'erreur de plantage de l'appli
laisser l'application se dérouler normalement comme si rien ne s'était
passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
après le plantage...et ca c'est très embêtant...
Vous me direz que je peux ajouter des tests de nullité de partout mais là
n'est pas le problème. Un simple "out of memory" peut m'envoyer le code en
l'air sans que j'en ai ni la connaissance, ni la cause et ni la
de faire marche arrière.
Mon but n'est pas de récupérer l'erreur mais de faire crasher
quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
lors d'un drag/drop.
Avez-vous une idée de ce qui pourrait être fait pour faire qqch de propre
Pour l'instant, j'utilise un patch qui fonctionne mais que ne me convient
pas.
J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type là
try {
......
} catch (Exception e) {
DragDropException=e;
}
avec bien entendu DragDropException une variable globale à la Form.
Et dans le code, j'utilise les lignes suivantes pour lancer une opération
drag/drop:
DragDropException=null;
DoDragDrop(this,DragDropEffects.All);
if (DragDropException!=null) throw DragDropException;
Ainsi, s'il y a un plantage de l'appli pendant une opération de drag/drop,
je peux récupérer le problème et faire planter l'appli. Seulement,
présentée précédemment utilise des try/catch alors que je suis sûr que
inutile et que l'on pourrait s'en passer...mais comment ?
Une idée ?
Merci par avance,
Ludovic Soeur.
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news:d17vmm$n3c$1@apollon.grec.isp.9tel.net...
> Vue générale;
>
> http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
>
>
>
> Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
DargDrop.
>
>
> --
> Paul Bacelar
>
> "Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> news:#kjg$8JKFHA.2772@TK2MSFTNGP14.phx.gbl...
> > Je ne comprends pas pourquoi quand une opération de drag/drop est
> > avec DoDragDrop, aucune exception n'est récupérée.
> > Les lignes suivantes illustrent mes propos. Dans l'événement
> Form2_DragDrop,
> > je force une exception avec la ligne "int b=1/a" (donc le message
> > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
catchée
> ?
> >
> > using System;
> > using System.Windows.Forms;
> >
> > public class Form2 : System.Windows.Forms.Form {
> > [STAThread]
> > static void Main() {
> > Application.Run(new Form2());
> > }
> >
> > public Form2() {
> > this.MouseDown += new
> > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > this.DragDrop += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > this.DragEnter += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > this.AllowDrop = true;
> > }
> >
> > private void Form2_MouseDown(object sender,
> > System.Windows.Forms.MouseEventArgs e) {
> > DoDragDrop(this,DragDropEffects.All);
> > }
> >
> > private void Form2_DragEnter(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > e.Effect=DragDropEffects.Copy;
> > }
> >
> > private void Form2_DragDrop(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > int a=0;
> > MessageBox.Show("Before exception");
> > int b=1/a;
> > MessageBox.Show("After exception");
> > }
> > }
> >
> >
> > Merci par avance,
> > Ludovic SOEUR
> >
> >
> >
>
>
Merci pour l'article très interessant sur le débat toujours ouvert sur les
exceptions.
Cependant, le code que j'ai présenté avait pour but de montrer en quelques
lignes le problème. Il est clair que de toutes façons, il n'y a pas de
MessageBox dans mon code pendant le drag/drop.
Le vrai problème est que s'il y a effectivement un bug non prévu (appel à
une méthode d'un objet non instancié par exemple ou bien out of memory),
programme ne va pas afficher le message d'erreur de plantage de l'appli
laisser l'application se dérouler normalement comme si rien ne s'était
passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
après le plantage...et ca c'est très embêtant...
Vous me direz que je peux ajouter des tests de nullité de partout mais là
n'est pas le problème. Un simple "out of memory" peut m'envoyer le code en
l'air sans que j'en ai ni la connaissance, ni la cause et ni la
de faire marche arrière.
Mon but n'est pas de récupérer l'erreur mais de faire crasher
quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
lors d'un drag/drop.
Avez-vous une idée de ce qui pourrait être fait pour faire qqch de propre
Pour l'instant, j'utilise un patch qui fonctionne mais que ne me convient
pas.
J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type là
try {
......
} catch (Exception e) {
DragDropException=e;
}
avec bien entendu DragDropException une variable globale à la Form.
Et dans le code, j'utilise les lignes suivantes pour lancer une opération
drag/drop:
DragDropException=null;
DoDragDrop(this,DragDropEffects.All);
if (DragDropException!=null) throw DragDropException;
Ainsi, s'il y a un plantage de l'appli pendant une opération de drag/drop,
je peux récupérer le problème et faire planter l'appli. Seulement,
présentée précédemment utilise des try/catch alors que je suis sûr que
inutile et que l'on pourrait s'en passer...mais comment ?
Une idée ?
Merci par avance,
Ludovic Soeur.
"Paul Bacelar" a écrit dans le message
de news:d17vmm$n3c$
> Vue générale;
>
> http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
>
>
>
> Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
DargDrop.
>
>
> --
> Paul Bacelar
>
> "Ludovic SOEUR" wrote in message
> news:#kjg$
> > Je ne comprends pas pourquoi quand une opération de drag/drop est
> > avec DoDragDrop, aucune exception n'est récupérée.
> > Les lignes suivantes illustrent mes propos. Dans l'événement
> Form2_DragDrop,
> > je force une exception avec la ligne "int b=1/a" (donc le message
> > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
catchée
> ?
> >
> > using System;
> > using System.Windows.Forms;
> >
> > public class Form2 : System.Windows.Forms.Form {
> > [STAThread]
> > static void Main() {
> > Application.Run(new Form2());
> > }
> >
> > public Form2() {
> > this.MouseDown += new
> > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > this.DragDrop += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > this.DragEnter += new
> > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > this.AllowDrop = true;
> > }
> >
> > private void Form2_MouseDown(object sender,
> > System.Windows.Forms.MouseEventArgs e) {
> > DoDragDrop(this,DragDropEffects.All);
> > }
> >
> > private void Form2_DragEnter(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > e.Effect=DragDropEffects.Copy;
> > }
> >
> > private void Form2_DragDrop(object sender,
> > System.Windows.Forms.DragEventArgs e) {
> > int a=0;
> > MessageBox.Show("Before exception");
> > int b=1/a;
> > MessageBox.Show("After exception");
> > }
> > }
> >
> >
> > Merci par avance,
> > Ludovic SOEUR
> >
> >
> >
>
>
J'ai suivi en mode pas à pas en assembleur votre exemple et ce que j'ai vu
est que la routine d'affichage d'erreur attend le moment propice pour
afficher la boite de dialogue.
L'erreur n'a pas été catchée mais le runtime cherche à afficher les
dans de bonnes conditions.
Si vous inspecter la pile lors de l'affichage de la première messagebox
après une première erreur (2ème dragAndDrop de suite), vous y verrez les
routines du runtime qui attendent que la voie soit libre pour afficher
boite de dialogue.
Les exceptions ne sont pas perdues mais leur affichage est empilé.
Avez-vous le même problème en Release?
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
news:eKVDK$
> Merci pour l'article très interessant sur le débat toujours ouvert sur
> exceptions.
>
> Cependant, le code que j'ai présenté avait pour but de montrer en
> lignes le problème. Il est clair que de toutes façons, il n'y a pas de
> MessageBox dans mon code pendant le drag/drop.
> Le vrai problème est que s'il y a effectivement un bug non prévu (appel
> une méthode d'un objet non instancié par exemple ou bien out of memory),
le
> programme ne va pas afficher le message d'erreur de plantage de l'appli
mais
> laisser l'application se dérouler normalement comme si rien ne s'était
> passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
> après le plantage...et ca c'est très embêtant...
> Vous me direz que je peux ajouter des tests de nullité de partout mais
> n'est pas le problème. Un simple "out of memory" peut m'envoyer le code
> l'air sans que j'en ai ni la connaissance, ni la cause et ni la
possibilité
> de faire marche arrière.
> Mon but n'est pas de récupérer l'erreur mais de faire crasher
l'application
> quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
> utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
> lors d'un drag/drop.
>
> Avez-vous une idée de ce qui pourrait être fait pour faire qqch de
?
> Pour l'instant, j'utilise un patch qui fonctionne mais que ne me
> pas.
> J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type
:
> try {
> ......
> } catch (Exception e) {
> DragDropException=e;
> }
>
> avec bien entendu DragDropException une variable globale à la Form.
> Et dans le code, j'utilise les lignes suivantes pour lancer une
de
> drag/drop:
> DragDropException=null;
> DoDragDrop(this,DragDropEffects.All);
> if (DragDropException!=null) throw DragDropException;
>
> Ainsi, s'il y a un plantage de l'appli pendant une opération de
> je peux récupérer le problème et faire planter l'appli. Seulement,
l'astuce
> présentée précédemment utilise des try/catch alors que je suis sûr que
c'est
> inutile et que l'on pourrait s'en passer...mais comment ?
>
> Une idée ?
>
> Merci par avance,
>
> Ludovic Soeur.
>
> "Paul Bacelar" a écrit dans le
> de news:d17vmm$n3c$
> > Vue générale;
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
> >
> >
> >
> > Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
> DargDrop.
> >
> >
> > --
> > Paul Bacelar
> >
> > "Ludovic SOEUR" wrote in message
> > news:#kjg$
> > > Je ne comprends pas pourquoi quand une opération de drag/drop est
lancée
> > > avec DoDragDrop, aucune exception n'est récupérée.
> > > Les lignes suivantes illustrent mes propos. Dans l'événement
> > Form2_DragDrop,
> > > je force une exception avec la ligne "int b=1/a" (donc le message
After
> > > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
> catchée
> > ?
> > >
> > > using System;
> > > using System.Windows.Forms;
> > >
> > > public class Form2 : System.Windows.Forms.Form {
> > > [STAThread]
> > > static void Main() {
> > > Application.Run(new Form2());
> > > }
> > >
> > > public Form2() {
> > > this.MouseDown += new
> > > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > > this.DragDrop += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > > this.DragEnter += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > > this.AllowDrop = true;
> > > }
> > >
> > > private void Form2_MouseDown(object sender,
> > > System.Windows.Forms.MouseEventArgs e) {
> > > DoDragDrop(this,DragDropEffects.All);
> > > }
> > >
> > > private void Form2_DragEnter(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > e.Effect=DragDropEffects.Copy;
> > > }
> > >
> > > private void Form2_DragDrop(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > int a=0;
> > > MessageBox.Show("Before exception");
> > > int b=1/a;
> > > MessageBox.Show("After exception");
> > > }
> > > }
> > >
> > >
> > > Merci par avance,
> > > Ludovic SOEUR
> > >
> > >
> > >
> >
> >
>
>
J'ai suivi en mode pas à pas en assembleur votre exemple et ce que j'ai vu
est que la routine d'affichage d'erreur attend le moment propice pour
afficher la boite de dialogue.
L'erreur n'a pas été catchée mais le runtime cherche à afficher les
dans de bonnes conditions.
Si vous inspecter la pile lors de l'affichage de la première messagebox
après une première erreur (2ème dragAndDrop de suite), vous y verrez les
routines du runtime qui attendent que la voie soit libre pour afficher
boite de dialogue.
Les exceptions ne sont pas perdues mais leur affichage est empilé.
Avez-vous le même problème en Release?
--
Paul Bacelar
"Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
news:eKVDK$fKFHA.3992@TK2MSFTNGP15.phx.gbl...
> Merci pour l'article très interessant sur le débat toujours ouvert sur
> exceptions.
>
> Cependant, le code que j'ai présenté avait pour but de montrer en
> lignes le problème. Il est clair que de toutes façons, il n'y a pas de
> MessageBox dans mon code pendant le drag/drop.
> Le vrai problème est que s'il y a effectivement un bug non prévu (appel
> une méthode d'un objet non instancié par exemple ou bien out of memory),
le
> programme ne va pas afficher le message d'erreur de plantage de l'appli
mais
> laisser l'application se dérouler normalement comme si rien ne s'était
> passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
> après le plantage...et ca c'est très embêtant...
> Vous me direz que je peux ajouter des tests de nullité de partout mais
> n'est pas le problème. Un simple "out of memory" peut m'envoyer le code
> l'air sans que j'en ai ni la connaissance, ni la cause et ni la
possibilité
> de faire marche arrière.
> Mon but n'est pas de récupérer l'erreur mais de faire crasher
l'application
> quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
> utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
> lors d'un drag/drop.
>
> Avez-vous une idée de ce qui pourrait être fait pour faire qqch de
?
> Pour l'instant, j'utilise un patch qui fonctionne mais que ne me
> pas.
> J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type
:
> try {
> ......
> } catch (Exception e) {
> DragDropException=e;
> }
>
> avec bien entendu DragDropException une variable globale à la Form.
> Et dans le code, j'utilise les lignes suivantes pour lancer une
de
> drag/drop:
> DragDropException=null;
> DoDragDrop(this,DragDropEffects.All);
> if (DragDropException!=null) throw DragDropException;
>
> Ainsi, s'il y a un plantage de l'appli pendant une opération de
> je peux récupérer le problème et faire planter l'appli. Seulement,
l'astuce
> présentée précédemment utilise des try/catch alors que je suis sûr que
c'est
> inutile et que l'on pourrait s'en passer...mais comment ?
>
> Une idée ?
>
> Merci par avance,
>
> Ludovic Soeur.
>
> "Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le
> de news:d17vmm$n3c$1@apollon.grec.isp.9tel.net...
> > Vue générale;
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
> >
> >
> >
> > Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
> DargDrop.
> >
> >
> > --
> > Paul Bacelar
> >
> > "Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> > news:#kjg$8JKFHA.2772@TK2MSFTNGP14.phx.gbl...
> > > Je ne comprends pas pourquoi quand une opération de drag/drop est
lancée
> > > avec DoDragDrop, aucune exception n'est récupérée.
> > > Les lignes suivantes illustrent mes propos. Dans l'événement
> > Form2_DragDrop,
> > > je force une exception avec la ligne "int b=1/a" (donc le message
After
> > > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
> catchée
> > ?
> > >
> > > using System;
> > > using System.Windows.Forms;
> > >
> > > public class Form2 : System.Windows.Forms.Form {
> > > [STAThread]
> > > static void Main() {
> > > Application.Run(new Form2());
> > > }
> > >
> > > public Form2() {
> > > this.MouseDown += new
> > > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > > this.DragDrop += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > > this.DragEnter += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > > this.AllowDrop = true;
> > > }
> > >
> > > private void Form2_MouseDown(object sender,
> > > System.Windows.Forms.MouseEventArgs e) {
> > > DoDragDrop(this,DragDropEffects.All);
> > > }
> > >
> > > private void Form2_DragEnter(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > e.Effect=DragDropEffects.Copy;
> > > }
> > >
> > > private void Form2_DragDrop(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > int a=0;
> > > MessageBox.Show("Before exception");
> > > int b=1/a;
> > > MessageBox.Show("After exception");
> > > }
> > > }
> > >
> > >
> > > Merci par avance,
> > > Ludovic SOEUR
> > >
> > >
> > >
> >
> >
>
>
J'ai suivi en mode pas à pas en assembleur votre exemple et ce que j'ai vu
est que la routine d'affichage d'erreur attend le moment propice pour
afficher la boite de dialogue.
L'erreur n'a pas été catchée mais le runtime cherche à afficher les
dans de bonnes conditions.
Si vous inspecter la pile lors de l'affichage de la première messagebox
après une première erreur (2ème dragAndDrop de suite), vous y verrez les
routines du runtime qui attendent que la voie soit libre pour afficher
boite de dialogue.
Les exceptions ne sont pas perdues mais leur affichage est empilé.
Avez-vous le même problème en Release?
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
news:eKVDK$
> Merci pour l'article très interessant sur le débat toujours ouvert sur
> exceptions.
>
> Cependant, le code que j'ai présenté avait pour but de montrer en
> lignes le problème. Il est clair que de toutes façons, il n'y a pas de
> MessageBox dans mon code pendant le drag/drop.
> Le vrai problème est que s'il y a effectivement un bug non prévu (appel
> une méthode d'un objet non instancié par exemple ou bien out of memory),
le
> programme ne va pas afficher le message d'erreur de plantage de l'appli
mais
> laisser l'application se dérouler normalement comme si rien ne s'était
> passé...sauf que l'appli n'aura pas executé tout le code qui se trouvait
> après le plantage...et ca c'est très embêtant...
> Vous me direz que je peux ajouter des tests de nullité de partout mais
> n'est pas le problème. Un simple "out of memory" peut m'envoyer le code
> l'air sans que j'en ai ni la connaissance, ni la cause et ni la
possibilité
> de faire marche arrière.
> Mon but n'est pas de récupérer l'erreur mais de faire crasher
l'application
> quand il y a une erreur non prévue. C'est pour ça que je ne veux pas
> utiliser un seul try/catch...pourtant apparemment, c'est ce qui se passe
> lors d'un drag/drop.
>
> Avez-vous une idée de ce qui pourrait être fait pour faire qqch de
?
> Pour l'instant, j'utilise un patch qui fonctionne mais que ne me
> pas.
> J'encadre TOUTES mes méthodes de drag/drop par un try catch de ce type
:
> try {
> ......
> } catch (Exception e) {
> DragDropException=e;
> }
>
> avec bien entendu DragDropException une variable globale à la Form.
> Et dans le code, j'utilise les lignes suivantes pour lancer une
de
> drag/drop:
> DragDropException=null;
> DoDragDrop(this,DragDropEffects.All);
> if (DragDropException!=null) throw DragDropException;
>
> Ainsi, s'il y a un plantage de l'appli pendant une opération de
> je peux récupérer le problème et faire planter l'appli. Seulement,
l'astuce
> présentée précédemment utilise des try/catch alors que je suis sûr que
c'est
> inutile et que l'on pourrait s'en passer...mais comment ?
>
> Une idée ?
>
> Merci par avance,
>
> Ludovic Soeur.
>
> "Paul Bacelar" a écrit dans le
> de news:d17vmm$n3c$
> > Vue générale;
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
> >
> >
> >
> > Il semblerais que la boite de dialogue d'alerte n'apprécie pas le
> DargDrop.
> >
> >
> > --
> > Paul Bacelar
> >
> > "Ludovic SOEUR" wrote in message
> > news:#kjg$
> > > Je ne comprends pas pourquoi quand une opération de drag/drop est
lancée
> > > avec DoDragDrop, aucune exception n'est récupérée.
> > > Les lignes suivantes illustrent mes propos. Dans l'événement
> > Form2_DragDrop,
> > > je force une exception avec la ligne "int b=1/a" (donc le message
After
> > > Exception ne sera pas affiché). Pourquoi cette exception n'est pas
> catchée
> > ?
> > >
> > > using System;
> > > using System.Windows.Forms;
> > >
> > > public class Form2 : System.Windows.Forms.Form {
> > > [STAThread]
> > > static void Main() {
> > > Application.Run(new Form2());
> > > }
> > >
> > > public Form2() {
> > > this.MouseDown += new
> > > System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
> > > this.DragDrop += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragDrop);
> > > this.DragEnter += new
> > > System.Windows.Forms.DragEventHandler(this.Form2_DragEnter);
> > > this.AllowDrop = true;
> > > }
> > >
> > > private void Form2_MouseDown(object sender,
> > > System.Windows.Forms.MouseEventArgs e) {
> > > DoDragDrop(this,DragDropEffects.All);
> > > }
> > >
> > > private void Form2_DragEnter(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > e.Effect=DragDropEffects.Copy;
> > > }
> > >
> > > private void Form2_DragDrop(object sender,
> > > System.Windows.Forms.DragEventArgs e) {
> > > int a=0;
> > > MessageBox.Show("Before exception");
> > > int b=1/a;
> > > MessageBox.Show("After exception");
> > > }
> > > }
> > >
> > >
> > > Merci par avance,
> > > Ludovic SOEUR
> > >
> > >
> > >
> >
> >
>
>
J'ai exactement le même problème en release.
Par contre, votre explication m'a beaucoup intéressé. Elle montre
qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
perdue. Maintenant reste à trouver comment la récupérer...
Une idée ?
J'ai exactement le même problème en release.
Par contre, votre explication m'a beaucoup intéressé. Elle montre
qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
perdue. Maintenant reste à trouver comment la récupérer...
Une idée ?
J'ai exactement le même problème en release.
Par contre, votre explication m'a beaucoup intéressé. Elle montre
qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
perdue. Maintenant reste à trouver comment la récupérer...
Une idée ?
"Ludovic SOEUR" wrote in message
news:Oz7$
> J'ai exactement le même problème en release.
> Par contre, votre explication m'a beaucoup intéressé. Elle montre
clairement
> qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> perdue. Maintenant reste à trouver comment la récupérer...
> Une idée ?
>
>
>
>
Avec un try{}catch{}?
Je ne suis pas trop.
--
Paul Bacelar
"Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
news:Oz7$xtwKFHA.2648@TK2MSFTNGP14.phx.gbl...
> J'ai exactement le même problème en release.
> Par contre, votre explication m'a beaucoup intéressé. Elle montre
clairement
> qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> perdue. Maintenant reste à trouver comment la récupérer...
> Une idée ?
>
>
>
>
Avec un try{}catch{}?
Je ne suis pas trop.
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
news:Oz7$
> J'ai exactement le même problème en release.
> Par contre, votre explication m'a beaucoup intéressé. Elle montre
clairement
> qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> perdue. Maintenant reste à trouver comment la récupérer...
> Une idée ?
>
>
>
>
Avec un try{}catch{}?
Je ne suis pas trop.
--
Paul Bacelar
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" a écrit dans le message
de news:%
>
> "Ludovic SOEUR" wrote in message
> news:Oz7$
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news:%230nAmT1KFHA.1156@TK2MSFTNGP09.phx.gbl...
>
> "Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> news:Oz7$xtwKFHA.2648@TK2MSFTNGP14.phx.gbl...
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" a écrit dans le message
de news:%
>
> "Ludovic SOEUR" wrote in message
> news:Oz7$
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" a écrit dans le message
de news:%
>
> "Ludovic SOEUR" wrote in message
> news:Oz7$
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news:%230nAmT1KFHA.1156@TK2MSFTNGP09.phx.gbl...
>
> "Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> news:Oz7$xtwKFHA.2648@TK2MSFTNGP14.phx.gbl...
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
Je reprends donc :
Dans le code, je lance l'opération de drag/drop par :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
DoDragDrop(this,DragDropEffects.All);
}
Si à la place, j'utilise les lignes suivantes :
private void Form2_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
try {
DoDragDrop(this,DragDropEffects.All);
MessageBox.Show("Après le drag");
} catch(Exception ex) {
throw ex;
}
}
l'exception n'est pas levée et le message "Après le drag" s'affiche, alors
qu'il faudrait que l'on passe dans le catch.
et même encore mieux, que l'on ait même pas à faire un try catch avec un
thow puisque je veux simplement que l'exception mefasse terminer le
programme.
J'ai été un peu plus clair ?
"Paul Bacelar" a écrit dans le message
de news:%
>
> "Ludovic SOEUR" wrote in message
> news:Oz7$
> > J'ai exactement le même problème en release.
> > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> clairement
> > qu'il doit être possible de récupérer l'exception et qu'elle n'est pas
> > perdue. Maintenant reste à trouver comment la récupérer...
> > Une idée ?
> >
> >
> >
> >
> Avec un try{}catch{}?
> Je ne suis pas trop.
>
>
>
> --
> Paul Bacelar
>
>
J'ai de mauvaises nouvelles :-(
J'ai utilisé reflector sur DoDragDrop de la class Control
<REFLECTOR>
public DragDropEffects DoDragDrop(object data, DragDropEffects
allowedEffects)
{
int[] numArray2 = new int[1];
int[] numArray1 = numArray2;
UnsafeNativeMethods.IOleDropSource source1 = new
Control.DropSource(this);
UnsafeNativeMethods.IOleDataObject obj1 = null;
if (data is UnsafeNativeMethods.IOleDataObject)
{
obj1 = (UnsafeNativeMethods.IOleDataObject) data;
}
else
{
DataObject obj2 = null;
if (data is IDataObject)
{
obj2 = new DataObject((IDataObject) data);
}
else
{
obj2 = new DataObject();
obj2.SetData(data);
}
obj1 = obj2;
}
try
{
SafeNativeMethods.DoDragDrop(obj1, source1, (int)
allowedEffects, numArray1);
}
catch (Exception)
{
}
return (DragDropEffects) numArray1[0];
}
</REFLECTOR>
Vous voyez le très laid try{}catch(Exception){...} entourant
"SafeNativeMethods.DoDragDrop(obj1, source1, (int) allowedEffects,
numArray1);"
Et bien les handlers d'évènement DragDrop sont appelés par cette ligne.
Vous ne récupérerez jamais une exception levée dans un handler sur un
dragDrop car la CLR c'est blindée contre le code appelé.
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
> Je reprends donc :
>
> Dans le code, je lance l'opération de drag/drop par :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
> Si à la place, j'utilise les lignes suivantes :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> try {
> DoDragDrop(this,DragDropEffects.All);
> MessageBox.Show("Après le drag");
> } catch(Exception ex) {
> throw ex;
> }
> }
> l'exception n'est pas levée et le message "Après le drag" s'affiche,
> qu'il faudrait que l'on passe dans le catch.
> et même encore mieux, que l'on ait même pas à faire un try catch avec un
> thow puisque je veux simplement que l'exception mefasse terminer le
> programme.
>
> J'ai été un peu plus clair ?
>
>
> "Paul Bacelar" a écrit dans le
> de news:%
> >
> > "Ludovic SOEUR" wrote in message
> > news:Oz7$
> > > J'ai exactement le même problème en release.
> > > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> > clairement
> > > qu'il doit être possible de récupérer l'exception et qu'elle n'est
> > > perdue. Maintenant reste à trouver comment la récupérer...
> > > Une idée ?
> > >
> > >
> > >
> > >
> > Avec un try{}catch{}?
> > Je ne suis pas trop.
> >
> >
> >
> > --
> > Paul Bacelar
> >
> >
J'ai de mauvaises nouvelles :-(
J'ai utilisé reflector sur DoDragDrop de la class Control
<REFLECTOR>
public DragDropEffects DoDragDrop(object data, DragDropEffects
allowedEffects)
{
int[] numArray2 = new int[1];
int[] numArray1 = numArray2;
UnsafeNativeMethods.IOleDropSource source1 = new
Control.DropSource(this);
UnsafeNativeMethods.IOleDataObject obj1 = null;
if (data is UnsafeNativeMethods.IOleDataObject)
{
obj1 = (UnsafeNativeMethods.IOleDataObject) data;
}
else
{
DataObject obj2 = null;
if (data is IDataObject)
{
obj2 = new DataObject((IDataObject) data);
}
else
{
obj2 = new DataObject();
obj2.SetData(data);
}
obj1 = obj2;
}
try
{
SafeNativeMethods.DoDragDrop(obj1, source1, (int)
allowedEffects, numArray1);
}
catch (Exception)
{
}
return (DragDropEffects) numArray1[0];
}
</REFLECTOR>
Vous voyez le très laid try{}catch(Exception){...} entourant
"SafeNativeMethods.DoDragDrop(obj1, source1, (int) allowedEffects,
numArray1);"
Et bien les handlers d'évènement DragDrop sont appelés par cette ligne.
Vous ne récupérerez jamais une exception levée dans un handler sur un
dragDrop car la CLR c'est blindée contre le code appelé.
--
Paul Bacelar
"Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> Je reprends donc :
>
> Dans le code, je lance l'opération de drag/drop par :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
> Si à la place, j'utilise les lignes suivantes :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> try {
> DoDragDrop(this,DragDropEffects.All);
> MessageBox.Show("Après le drag");
> } catch(Exception ex) {
> throw ex;
> }
> }
> l'exception n'est pas levée et le message "Après le drag" s'affiche,
> qu'il faudrait que l'on passe dans le catch.
> et même encore mieux, que l'on ait même pas à faire un try catch avec un
> thow puisque je veux simplement que l'exception mefasse terminer le
> programme.
>
> J'ai été un peu plus clair ?
>
>
> "Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le
> de news:%230nAmT1KFHA.1156@TK2MSFTNGP09.phx.gbl...
> >
> > "Ludovic SOEUR" <Ludovic_SOEUR@hotmail.com> wrote in message
> > news:Oz7$xtwKFHA.2648@TK2MSFTNGP14.phx.gbl...
> > > J'ai exactement le même problème en release.
> > > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> > clairement
> > > qu'il doit être possible de récupérer l'exception et qu'elle n'est
> > > perdue. Maintenant reste à trouver comment la récupérer...
> > > Une idée ?
> > >
> > >
> > >
> > >
> > Avec un try{}catch{}?
> > Je ne suis pas trop.
> >
> >
> >
> > --
> > Paul Bacelar
> >
> >
J'ai de mauvaises nouvelles :-(
J'ai utilisé reflector sur DoDragDrop de la class Control
<REFLECTOR>
public DragDropEffects DoDragDrop(object data, DragDropEffects
allowedEffects)
{
int[] numArray2 = new int[1];
int[] numArray1 = numArray2;
UnsafeNativeMethods.IOleDropSource source1 = new
Control.DropSource(this);
UnsafeNativeMethods.IOleDataObject obj1 = null;
if (data is UnsafeNativeMethods.IOleDataObject)
{
obj1 = (UnsafeNativeMethods.IOleDataObject) data;
}
else
{
DataObject obj2 = null;
if (data is IDataObject)
{
obj2 = new DataObject((IDataObject) data);
}
else
{
obj2 = new DataObject();
obj2.SetData(data);
}
obj1 = obj2;
}
try
{
SafeNativeMethods.DoDragDrop(obj1, source1, (int)
allowedEffects, numArray1);
}
catch (Exception)
{
}
return (DragDropEffects) numArray1[0];
}
</REFLECTOR>
Vous voyez le très laid try{}catch(Exception){...} entourant
"SafeNativeMethods.DoDragDrop(obj1, source1, (int) allowedEffects,
numArray1);"
Et bien les handlers d'évènement DragDrop sont appelés par cette ligne.
Vous ne récupérerez jamais une exception levée dans un handler sur un
dragDrop car la CLR c'est blindée contre le code appelé.
--
Paul Bacelar
"Ludovic SOEUR" wrote in message
> Je reprends donc :
>
> Dans le code, je lance l'opération de drag/drop par :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> DoDragDrop(this,DragDropEffects.All);
> }
> Si à la place, j'utilise les lignes suivantes :
> private void Form2_MouseDown(object sender,
> System.Windows.Forms.MouseEventArgs e) {
> try {
> DoDragDrop(this,DragDropEffects.All);
> MessageBox.Show("Après le drag");
> } catch(Exception ex) {
> throw ex;
> }
> }
> l'exception n'est pas levée et le message "Après le drag" s'affiche,
> qu'il faudrait que l'on passe dans le catch.
> et même encore mieux, que l'on ait même pas à faire un try catch avec un
> thow puisque je veux simplement que l'exception mefasse terminer le
> programme.
>
> J'ai été un peu plus clair ?
>
>
> "Paul Bacelar" a écrit dans le
> de news:%
> >
> > "Ludovic SOEUR" wrote in message
> > news:Oz7$
> > > J'ai exactement le même problème en release.
> > > Par contre, votre explication m'a beaucoup intéressé. Elle montre
> > clairement
> > > qu'il doit être possible de récupérer l'exception et qu'elle n'est
> > > perdue. Maintenant reste à trouver comment la récupérer...
> > > Une idée ?
> > >
> > >
> > >
> > >
> > Avec un try{}catch{}?
> > Je ne suis pas trop.
> >
> >
> >
> > --
> > Paul Bacelar
> >
> >