<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET</title><link>http://blogs.labo-dotnet.com/gg00xiv/category/396.aspx</link><description>Tout ce qui relatif aux technologies .NET</description><managingEditor>Grégory Ghez</managingEditor><dc:language>fr-FR</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>Grégory Ghez</dc:creator><title>Présentation du format de fichier XML d'Excel</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx</link><pubDate>Wed, 05 Oct 2005 22:23:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10334.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10334.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10334.aspx</trackback:ping><description>Je viens de terminer la r&amp;#233;daction d'un article sur ce sujet, disponible d&amp;#232;s &amp;#224; pr&amp;#233;sent sur le site du laboratoire .net &amp;#224; cette adresse : &lt;A href="http://www.labo-dotnet.com/Articles/Office/Spreadsheet%20ML%20et%20g&amp;#233;n&amp;#233;ration%20de%20fichier%20Excel/0/1547.aspx"&gt;http://www.labo-dotnet.com/Articles/Office/Spreadsheet%20ML%20et%20g&amp;#233;n&amp;#233;ration%20de%20fichier%20Excel/0/1547.aspx&lt;/A&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10334.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Manipuler le contenu d'une image en .NET</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx</link><pubDate>Mon, 12 Sep 2005 17:18:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10279.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10279.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10279.aspx</trackback:ping><description>&lt;P&gt;Je sais d&amp;#233;j&amp;#224; que je vais me retrouver comme avec mon post sur le goto avec des 10aines de commentaires de d&amp;#233;fenseur des principes divins du .NET, mais &amp;#231;&amp;#224; m'est &amp;#233;gal, j'adore vous voir dans cet &amp;#233;tat :)&lt;/P&gt;
&lt;P&gt;Je me lance, dans ce post je vais vous montrer comment manipuler le contenu d'une image en .NET de la mani&amp;#232;re la plus rapide qu'il me semble faisable de faire: l'utilisation de code unsafe (pointeurs) mais toujours dans le but de gagner en performance et non d'obscurcir le code.&lt;BR&gt;&lt;BR&gt;En effet, il existe une m&amp;#233;thode de traitement dans la classe &lt;STRONG&gt;&lt;EM&gt;Bitmap&lt;/EM&gt;&lt;/STRONG&gt; qui permet de r&amp;#233;cup&amp;#233;rer les donn&amp;#233;es de l'image en m&amp;#233;moire. Il s'agit de la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;LockBits&lt;/EM&gt;&lt;/STRONG&gt; :&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;Rectangle bmpRect = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; Rectangle(0, 0, bmp.Width, bmp.Height); &lt;FONT color=#008000&gt;// bmp est de type Bitmap&lt;/FONT&gt;&lt;BR&gt;BitmapData bmpData = bmp.&lt;STRONG&gt;LockBits&lt;/STRONG&gt;(bmpRect, ImageLockMode.ReadOnly, bmp.PixelFormat);&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;L'objet &lt;STRONG&gt;&lt;EM&gt;BitmapData&lt;/EM&gt;&lt;/STRONG&gt; contient les donn&amp;#233;es internes de l'image et notament un pointeur vers le d&amp;#233;but des donn&amp;#233;es de l'image en m&amp;#233;moire. La propri&amp;#233;t&amp;#233; &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt; remplit ce r&amp;#244;le:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;byte&lt;/FONT&gt;&lt;FONT size=2&gt;* data = (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;byte&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;*)bmpData.&lt;STRONG&gt;Scan0&lt;/STRONG&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Inutile de pr&amp;#233;ciser qu'&amp;#224; partir de ce moment, nous passons en mode non manag&amp;#233; car nous faisons un acc&amp;#232;s direct &amp;#224; la m&amp;#233;moire via &lt;EM&gt;data&lt;/EM&gt;. C'est pourquoi la m&amp;#233;thode contenant ce code doit comporter le mot cl&amp;#233; &lt;STRONG&gt;&lt;EM&gt;unsafe&lt;/EM&gt;&lt;/STRONG&gt; (Le projet doit &amp;#233;galement &amp;#234;tre compil&amp;#233; avec l'attribut /unsafe afin d'accepter ce code, voir les propri&amp;#233;t&amp;#233;s du projet dans VS.NET).&lt;BR&gt;&lt;BR&gt;Nous avons donc acc&amp;#232;s &amp;#224; une zone m&amp;#233;moire lin&amp;#233;aire qu'il va falloir comprendre comme un tableau &amp;#224; deux dimensions contenant les pixels aux coordonn&amp;#233;es x,y de notre image. Voici comment est stock&amp;#233;e l'image en m&amp;#233;moire et la relation entre cette repr&amp;#233;sentation et les propri&amp;#233;t&amp;#233;s &lt;STRONG&gt;&lt;EM&gt;Stride&lt;/EM&gt;&lt;/STRONG&gt; et &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;de la classe &lt;STRONG&gt;&lt;EM&gt;BitmapData&lt;/EM&gt;&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=349 src="/gg00xiv/images/lockin1.gif" width=379 border=0&gt;&amp;nbsp;(source: &lt;A href="http://www.bobpowell.net/lockingbits.htm"&gt;http://www.bobpowell.net/lockingbits.htm&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;On utilisera donc le code suivant pour parcourir les pixels de notre image:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; i = 0;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; x=0; x&amp;lt;bmp.Width; x++)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; y=0; y&amp;lt;bmp.Height; y++)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = y * bmpData.&lt;STRONG&gt;Stride&lt;/STRONG&gt; + x * 3;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// manipulation du pixel ;)&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Il suffit donc d'indexer notre pointeur que l'on peut consid&amp;#233;rer comme un tableau afin d'obtenir les nuances rouge, vert et bleu (et alpha &amp;#233;ventuellement)&amp;nbsp;de notre pixel. Dans le cas pr&amp;#233;sent mon image est enregistr&amp;#233; en 24bpp donc les pixels se trouvent tous les &lt;EM&gt;x * 3&lt;/EM&gt; bytes.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;data[i+2] &lt;FONT color=#008000&gt;// rouge&lt;BR&gt;&lt;/FONT&gt;data[i+1] &lt;FONT color=#008000&gt;// vert&lt;BR&gt;&lt;/FONT&gt;data[i] &lt;FONT color=#008000&gt;// bleu&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Remarque&lt;/U&gt;: Lorsque vous cr&amp;#233;ez une image avec l'instruction &lt;STRONG&gt;&lt;EM&gt;new Bitmap(...)&lt;/EM&gt;&lt;/STRONG&gt; sans pr&amp;#233;ciser le param&amp;#232;tre &lt;STRONG&gt;&lt;EM&gt;PixelFormat&lt;/EM&gt;&lt;/STRONG&gt;, l'image est cr&amp;#233;&amp;#233;e en 32bpp et il faut donc utiliser &lt;EM&gt;x * 4&lt;/EM&gt; pour parcourir l'image dans la formule pr&amp;#233;c&amp;#233;dente pour &lt;EM&gt;i&lt;/EM&gt; (data[i+3] repr&amp;#233;sente alors la nuance alpha).&lt;BR&gt;Si vous souhaitez changer le contenu de data, cela est possible, il faut pr&amp;#233;ciser le param&amp;#232;tre &lt;STRONG&gt;&lt;EM&gt;ImageLockMode&lt;/EM&gt;&lt;/STRONG&gt; de &lt;STRONG&gt;&lt;EM&gt;LockBits&lt;/EM&gt;&lt;/STRONG&gt; &amp;#224; &lt;STRONG&gt;&lt;EM&gt;ImageLockMode.ReadWrite&lt;/EM&gt;&lt;/STRONG&gt; ou &lt;STRONG&gt;&lt;EM&gt;ImageLockMode.WriteOnly&lt;/EM&gt;&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Une fois que vous avez fini votre traitement, n'oubliez surtout pas d'appeler la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;UnlockBits&lt;/EM&gt;&lt;/STRONG&gt; afin de permettre au Garbage Collector de disposer de cet espace m&amp;#233;moire &amp;#224; sa guise pour sa gestion.&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;bmp.&lt;STRONG&gt;UnlockBits&lt;/STRONG&gt;(bmpData);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Voici la mani&amp;#232;re la plus simple en code manag&amp;#233; pour parcourir une image:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; x=0; x&amp;lt;bmp.Width; x++)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; y=0; y&amp;lt;bmp.Height; y++)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Color c = bmp.GetPixel(x, y);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// code de manipulation&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Le probl&amp;#232;me avec cette m&amp;#233;thode se pose lorsque l'on doit manipuler des images de grande taille. On se trouve alors &amp;#224; effectuer &lt;EM&gt;bmp.Width * bmp.Height&lt;/EM&gt; appels &amp;#224; la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;GetPixel()&lt;/EM&gt;&lt;/STRONG&gt; ce qui ralentit consid&amp;#233;rablement l'&amp;#233;x&amp;#233;cution de la routine.&lt;/P&gt;
&lt;P&gt;Une autre m&amp;#233;thode&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;encore consiste &amp;#224;&amp;nbsp;parcourir les&amp;nbsp;informations&amp;nbsp;accessibles par &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;via la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;System.Runtime.InteropServices.Marshal.ReadByte(bmpData.Scan0, i)&lt;/EM&gt;&lt;/STRONG&gt;. Mais vous voyez que le probl&amp;#232;me de &lt;STRONG&gt;&lt;EM&gt;GetPixel&lt;/EM&gt;&lt;/STRONG&gt; se retrouve ici car pour chaque nuance il va falloir faire appel &amp;#224; cette m&amp;#233;thode.&lt;/P&gt;
&lt;P&gt;N'h&amp;#233;sitez pas &amp;#224; me soumettre vos id&amp;#233;es sur le sujet.&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10279.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>L'instruction goto en C#</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx</link><pubDate>Sun, 11 Sep 2005 02:37:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10246.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10246.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10246.aspx</trackback:ping><description>&lt;P&gt;Il s'agit d'une instruction tr&amp;#232;s peu utilis&amp;#233;e mais qui peut s'av&amp;#233;rer fort utile dans certains cas.&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; sert &amp;#224; faire saut non-conditionnel vers un label r&amp;#233;f&amp;#233;renc&amp;#233; autre part dans le code.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Exemple:&lt;BR&gt;&lt;/U&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;[] tab = {"Bonjour", "les", "gens"};&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; tab)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT size=2&gt; c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; s)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;nbsp;(c == 'e')&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; Suite;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;Suite:&lt;BR&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show("Le caract&amp;#232;re 'e' a &amp;#233;t&amp;#233; trouv&amp;#233; dans une des cha&amp;#238;nes.");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Dans cet exemple, on comprends bien l'int&amp;#233;r&amp;#234;t du &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt;, qui permet de passer directement &amp;#224; la suite du code si le test est concluant. Si nous n'avions pas utiliser le &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt;, on aurait eu la construction suivante:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;[] tab = {"Bonjour", "les", "gens"};&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;FONT size=2&gt; present = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; tab)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT size=2&gt; c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; s)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (c == 'e')&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; present = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (present)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;;&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (present)&lt;BR&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show("Le caract&amp;#232;re 'e' a &amp;#233;t&amp;#233; trouv&amp;#233; dans une des cha&amp;#238;nes.");&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;On voit bien qu'au niveau de la lisibilit&amp;#233; et des performances, l'instruction &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; l'emporte, en effet, vous&amp;nbsp;&amp;#233;vitez un saut non-conditionnel ainsi qu'un test conditionnel. Vous gagnez &amp;#233;galement quelques lignes de code, ce qui n'est pas pour d&amp;#233;plaire lorsque l'on traite avec des fichiers contenant plusieurs milliers de lignes.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Remarques:&lt;/U&gt;&lt;BR&gt;Lorsque vous d&amp;#233;clarez un label (&lt;EM&gt;Suite&lt;/EM&gt; dans notre exemple), vous devez imp&amp;#233;rativement le faire suivre d'une instruction. En effet, s'il n'y avait pas d'instruction entre le label et la fin de notre m&amp;#233;thode, cela reviendrait &amp;#224; faire appel &amp;#224; l'instruction &lt;STRONG&gt;&lt;EM&gt;return&lt;/EM&gt;&lt;/STRONG&gt; directement.&lt;BR&gt;Vous ne pouvez pas non plus faire un saut non-conditionnel &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; vers un endroit du code qui ne serait pas dans la port&amp;#233;e du code &amp;#233;x&amp;#233;cutant l'instruction &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; (On ne peut pas faire un saut du dehors d'une boucle vers l'int&amp;#233;rieure de celle-ci par exemple).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfthegotostatement.asp"&gt;Lien MSDN&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10246.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Apprendre les transformations de bases en GDI+</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9835.aspx</link><pubDate>Mon, 05 Sep 2005 16:46:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9835.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/9835.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9835.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/9835.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/9835.aspx</trackback:ping><description>&lt;P&gt;En surfant un peu sur Internet et plus particuli&amp;#232;rement sur le site MSDN, je suis tomb&amp;#233; sur un lot de 3 articles tr&amp;#232;s int&amp;#233;ressants pour ceux d'entre vous qui souhaiteraient apprendre &amp;#224; utiliser les transformations et les matrices en &lt;A title="" href="/gg00xiv/category/390.aspx"&gt;GDI+&lt;/A&gt;.&lt;/P&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/coordinatesystemsandtransformations/typesofcoordinatesystems.asp"&gt;Types of Coordinate Systems&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/coordinatesystemsandtransformations/matrixrepresentationoftransformations.asp"&gt;Matrix Representation of Transformations&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/coordinatesystemsandtransformations/globalandlocaltransformations.asp"&gt;Global and Local Transformations&lt;/A&gt; 
&lt;P&gt;On vous explique par exemple comment ces deux cercles ci-dessous ont &amp;#233;t&amp;#233; dessin&amp;#233;s par le m&amp;#234;me appel de m&amp;#233;thode en ayant entre chaque appliquer une s&amp;#233;rie de transformations.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=140 src="/gg00xiv/images/aboutgdip05_art14.png" width=183 border=0&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;U&gt;Code&lt;/U&gt;: myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Bonne lecture !&lt;/P&gt;&lt;/LI&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/9835.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Nouvelle version de 3DLib</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9614.aspx</link><pubDate>Mon, 05 Sep 2005 02:45:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9614.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/9614.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/05/9614.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/9614.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/9614.aspx</trackback:ping><description>&lt;P&gt;Je continue &amp;#224; d&amp;#233;velopper cette librairie avec passion, et rien que pour vous, ce nouveau volet de 3DLib:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.labo-dotnet.com/gg00xiv/articles/9613.aspx"&gt;http://blogs.labo-dotnet.com/gg00xiv/articles/9613.aspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG height=403 src="/gg00xiv/images/Sans%20titre.JPG" width=501 border=0&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/9614.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Récupérer les données d'Outlook dans un DataSet</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/02/9598.aspx</link><pubDate>Fri, 02 Sep 2005 16:12:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/02/9598.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/9598.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/02/9598.aspx#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/9598.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/9598.aspx</trackback:ping><description>&lt;P&gt;Il existe une classe d&amp;#233;velopp&amp;#233;e par Mathias Taylor sur &lt;A href="http://www.codeproject.com"&gt;www.codeproject.com&lt;/A&gt; qui permet en effet, de r&amp;#233;cup&amp;#233;rer les informations de contacts, calendrier, mails, etc... dans un objet facilement manipulable en .NET, le &lt;STRONG&gt;&lt;EM&gt;DataSet&lt;/EM&gt;&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Personnellement je l'utilise assez souvent d&amp;#233;sormais vu qu'il devient tr&amp;#232;s facile de lire et d'afficher les infos de mes contacts.&lt;/P&gt;
&lt;P&gt;Ce composant requiert l'installation de Office version 10 (XP)&amp;nbsp;minimum car vous devez poss&amp;#233;der l'objet COM d'Outlook.&lt;/P&gt;
&lt;P&gt;Voici le lien de cet outils dont le code source est disponible: &lt;A href="http://www.codeproject.com/csharp/OutlookConnector.asp"&gt;http://www.codeproject.com/csharp/OutlookConnector.asp&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Mise &amp;#224; jour:&amp;nbsp;J'ai rajout&amp;#233; dans un feedback le code pour cr&amp;#233;er un contact dans Outlook.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/9598.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Programmation 3D avec GDI+</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/08/25/8856.aspx</link><pubDate>Thu, 25 Aug 2005 01:15:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/08/25/8856.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/8856.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/08/25/8856.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/8856.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/8856.aspx</trackback:ping><description>&lt;P&gt;Dans cet article vous d&amp;#233;couvrirez les bases de la programmation 3D en .NET avec la technologie &lt;a title="" href="http://blogs.labo-dotnet.com/gg00xiv/category/390.aspx" &gt;GDI+&lt;/a&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.labo-dotnet.com/gg00xiv/articles/8855.aspx"&gt;http://blogs.labo-dotnet.com/gg00xiv/articles/8855.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/8856.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Différences entre tableau[][] et tableau[,]</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/22/5703.aspx</link><pubDate>Sun, 22 May 2005 23:52:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/22/5703.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/5703.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/22/5703.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/5703.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/5703.aspx</trackback:ping><description>&lt;P&gt;Vous connaissiez le tableau de tableau en C++, il s'agissait de ce que l'on appelait un tableau &amp;#224; deux dimensions.&lt;/P&gt;
&lt;P&gt;Malheureusement, en C#, un int[][] n'est pas un tableau &amp;#224; 2 dimensions, mais &amp;#224; 1 dimension, chaque &amp;#233;l&amp;#233;ment &amp;#233;tant lui m&amp;#234;me un tableau &amp;#224; 1 dimension.&lt;/P&gt;
&lt;P&gt;Voyez pl&amp;#251;tot avec cet exemple :&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;int&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;[][] tab = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;[][]&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;{&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;[2],&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;[6]&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;};&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;[,] tab2 = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;[2, 6];&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("Taille de tab : {0}", tab.Length);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("Taille de tab2: {0}", tab2.Length);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("tab[1][3] = {0}", tab[1][3]);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("tab2[1, 3]= {0}", tab2[1, 3]);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("Dimensions de tab : {0}", tab.Rank);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;Console.WriteLine("Dimensions de tab2: {0}", tab2.Rank);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Dont le r&amp;#233;sultat &amp;#224; l'affichage donne :&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG height=114 src="/gg00xiv/images/tab.JPG" width=231 border=0&gt;&lt;/P&gt;
&lt;P&gt;On constate donc que l'on ne peut pas acc&amp;#233;der &amp;#224; un tableau[][] de la m&amp;#234;me fa&amp;#231;on qu'un tableau[,] et surtout que ce sont des types compl&amp;#233;tement diff&amp;#233;rents.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notez aussi que l'&amp;#233;criture avec [][] n'est pas en accord avec les r&amp;#232;gles de la CLS (Common Language Specification). Vous pouvez donc ne pas retrouver d'&amp;#233;quivalent dans d'autres langages supportant le Framework .NET.&lt;/P&gt;
&lt;P&gt;De plus, les performances sont s&amp;#233;v&amp;#232;rement diminu&amp;#233;e avec l'utilisation d'un tableau [][] compar&amp;#233; &amp;#224; un tableau [,] (cf.: &lt;A target="_blank" href="http://msdn.microsoft.com/msdnmag/issues/04/03/ScientificC/"&gt;http://msdn.microsoft.com/msdnmag/issues/04/03/ScientificC/&lt;/A&gt;).&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/5703.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Nouvel article GDI+ sur Labo-Dotnet</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/12/5584.aspx</link><pubDate>Thu, 12 May 2005 15:59:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/12/5584.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/5584.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/05/12/5584.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/5584.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/5584.aspx</trackback:ping><description>&lt;P&gt;La plupart des applications Windows que vous rencontrez pr&amp;#233;sentent quelques animations de l&amp;#8217;interface aux r&amp;#233;actions de l&amp;#8217;utilisateur ou non. Prenez par exemple Internet Explorer et le petit drapeau Windows en haut &amp;#224; droite qui tourne montrant que l&amp;#8217;application acc&amp;#232;de &amp;#224; Internet.&lt;/P&gt;
&lt;P&gt;Les animations sont un agr&amp;#233;ment et ne proposent g&amp;#233;n&amp;#233;ralement aucune fonctionnalit&amp;#233;. Cependant ils permettent souvent de mettre en valeur des parties du programme et de rendre plus conviviale votre application.&lt;/P&gt;
&lt;P&gt;Dans cet article, je vais vous pr&amp;#233;senter comment r&amp;#233;aliser une animation en C# en utilisant les techniques &lt;A title="" HREF="/gg00xiv/category/390.aspx"&gt;GDI+&lt;/A&gt; et la programmation des Threads.&lt;/P&gt;
&lt;P&gt;&lt;A target="_blank" href="http://www.labo-dotnet.com/Articles/Csharp/Animation%20GDI+%20utilisant%20des%20Threads/Introduction/0/1495.aspx"&gt;http://www.labo-dotnet.com/Articles/Csharp/Animation%20GDI+%20utilisant%20des%20Threads/Introduction/0/1495.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/5584.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>ASP.NET: Passage de la Beta 1 à la Beta 2</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/04/30/5510.aspx</link><pubDate>Sat, 30 Apr 2005 14:02:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/04/30/5510.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/5510.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/04/30/5510.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/5510.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/5510.aspx</trackback:ping><description>&lt;P&gt;Je cr&amp;#233;e ce post &amp;#224; destination de ceux qui voudraient migrer tout comme moi leur projet r&amp;#233;alis&amp;#233; avec la beta1 du &lt;STRONG&gt;framework 2.0&lt;/STRONG&gt; vers la &lt;STRONG&gt;beta2&lt;/STRONG&gt; nouvellement sortie.&lt;/P&gt;
&lt;P&gt;Voici quelques tips vous permettant d'&amp;#233;viter bien des heures de recherches. Certains de ces tips ont &amp;#233;t&amp;#233; r&amp;#233;cup&amp;#233;r&amp;#233;s sur le net sur des forums, certains viennent de mon acharnement &amp;#224; comprendre pourquoi ca ne marche plus...&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Les voici:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;AVANT: &amp;lt;@Page CompileWith="..." ClassName="..."&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MAINTENANT: &amp;lt;@Page CodeFile="..." Inherits="..."&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AVANT: Les &amp;#233;v&amp;#232;nements g&amp;#233;n&amp;#233;r&amp;#233;s dans le fichier .cs &amp;#233;taient d&amp;#233;clar&amp;#233;s en void uniquement&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MAINTENANT: Il faut faire pr&amp;#233;c&amp;#233;der void par protected (l'absence de modificateur d'acc&amp;#232;s revient &amp;#224; &amp;#233;crire un private).&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AVANT: Les dossiers sp&amp;#233;ciaux &amp;#233;taient : Code, LocalResources, etc...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MAINTENANT: Fa&amp;#238;tes pr&amp;#233;c&amp;#233;der ces noms de dossiers par "App_" : App_Code, App_LocalResources, etc...&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AVANT: Dans vos SqlDataAdapter vous n'aviez qu'&amp;#224; pr&amp;#233;ciser SelectCommand="...." et le nom de votre pr&amp;#233;c&amp;#233;dure stock&amp;#233;e.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MAINTENANT: Vous devez obligatoirement pr&amp;#233;ciser SelectCommandType="StoredProcedure" si votre requ&amp;#234;te admet un ou plusieurs param&amp;#232;tres.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AVANT: Vous n'aviez plus besoin de faire h&amp;#233;riter votre classe partial de Page&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MAINTENANT: Vous devez imp&amp;#233;rativement mettre vous m&amp;#234;me la classe de base apr&amp;#232;s la d&amp;#233;claration de votre classe de page, usercontrol ou masterpage (Default_aspx: Page, MonUserControl_ascx: UserControl, Master.master: MasterPage)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Voil&amp;#224;, bon courage !&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/5510.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>