<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juan Diego Mejía Maestre</title>
    <description>The latest articles on DEV Community by Juan Diego Mejía Maestre (@juandiegows).</description>
    <link>https://dev.to/juandiegows</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F628135%2F968daffe-0f7d-43be-b51f-ebf672d5d7d8.png</url>
      <title>DEV Community: Juan Diego Mejía Maestre</title>
      <link>https://dev.to/juandiegows</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juandiegows"/>
    <language>en</language>
    <item>
      <title>Cómo devolver un HttpStatusCode y un Json a la vez en una API con .net framework</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Thu, 06 Jan 2022 00:18:14 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-devolver-un-httpstatuscode-y-un-json-a-la-vez-en-una-api-con-net-framework-588a</link>
      <guid>https://dev.to/juandiegows/como-devolver-un-httpstatuscode-y-un-json-a-la-vez-en-una-api-con-net-framework-588a</guid>
      <description>&lt;p&gt;Sí estás intentando devolver un resultado Json y un HttpStatusCode a mismo tiempo y no sabes cómo, aquí te diremos.&lt;/p&gt;

&lt;p&gt;para algunos código HTTP ya existen unos métodos predeterminado para devolver el código y una respuesta Json. por ejemplo &lt;/p&gt;

&lt;p&gt;Ok() =&amp;gt;      HttpStatusCode.OK    =&amp;gt; 200&lt;br&gt;
BadRequest() =&amp;gt;     HttpStatusCode.BadRequest =&amp;gt; 400&lt;/p&gt;

&lt;p&gt;algunos métodos solo retornan un estado HTTP sin objecto JSON pero si quieres retorna cualquier estado HTTP sin una respuesta JSON intenta esto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
StatusCode(System.Net.HttpStatusCode.Unauthorized);
StatusCode(System.Net.HttpStatusCode.OK);
StatusCode(System.Net.HttpStatusCode.NotFound);
StatusCode(System.Net.HttpStatusCode.Forbidden);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pero si lo que quieres es devolver cualquier Estado HTTP con una respuesta JSON debe hacer lo siguiente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content&amp;lt;T&amp;gt;(System.Net.HttpStatusCode.Unauthorized,new T() { });
Content&amp;lt;LoginRequest&amp;gt;(System.Net.HttpStatusCode.Unauthorized,new LoginRequest() { });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Donde T es el tipo de objecto que se devolver en el JSON, puedes poner la clase del objecto que vayas a devolver en la respuesta JSON.&lt;/p&gt;

&lt;p&gt;Espero haberte ayudado, te agradecería  que me sigas en mis redes sociales.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCBruvsN18FvqNHSHe7E6WWg"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>api</category>
      <category>netframework</category>
      <category>webapi</category>
    </item>
    <item>
      <title>Cómo agregar un vídeo de YouTube en Dev.to</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Thu, 20 May 2021 02:32:37 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-insertar-un-video-de-youtube-en-dev-to-3hhm</link>
      <guid>https://dev.to/juandiegows/como-insertar-un-video-de-youtube-en-dev-to-3hhm</guid>
      <description>&lt;p&gt;Para insertar un vídeo de YouTube lo primero es tener el enlace, del enlace solo vamos a necesitar el id del vídeo.&lt;/p&gt;

&lt;p&gt;por ejemplo. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1QZHT9by2xo"&gt;https://www.youtube.com/watch?v=1QZHT9by2xo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;el id esta entre &lt;code&gt;v=&lt;/code&gt; hasta &lt;code&gt;&amp;amp;&lt;/code&gt;, ósea que el id es &lt;code&gt;1QZHT9by2xo&lt;/code&gt;&lt;br&gt;
pero si el enlace es así &lt;a href="https://youtu.be/1QZHT9by2xo"&gt;https://youtu.be/1QZHT9by2xo&lt;/a&gt; el id es la parte final de la url, después del &lt;code&gt;.be/&lt;/code&gt; es decir  &lt;code&gt;1QZHT9by2xo&lt;/code&gt; &lt;br&gt;
una vez identifique el id del vídeo solo debe copiar este código en la publicación de dev.to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% youtube 1QZHT9by2xo %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y quedaría así&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/1QZHT9by2xo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;fuente &lt;br&gt;
&lt;a href="https://dev.to/kazz/boost-your-productivity-using-markdown-1be"&gt;https://dev.to/issuehunt/boost-your-productivity-using-markdown-1be&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devto</category>
    </item>
    <item>
      <title>Cómo crear aplicaciones multilenguaje con C#</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Wed, 19 May 2021 02:07:27 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-crear-aplicaciones-multilenguaje-con-c-539b</link>
      <guid>https://dev.to/juandiegows/como-crear-aplicaciones-multilenguaje-con-c-539b</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BQauingTbIQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JuanDiegogit/MultiLenguaje"&gt;Clic aquí&lt;/a&gt; para ver un proyecto de ejemplo.&lt;/p&gt;

&lt;p&gt;Para crear una aplicación multilenguaje en C# lo primero es crear una carpeta donde vamos a colocar cada uno de los lenguajes llamada &lt;code&gt;Lenguajes&lt;/code&gt; o el nombre que desees.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tBXQas-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5r73dxgts9ldwu26xx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tBXQas-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5r73dxgts9ldwu26xx7.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego agregamos un archivo de recurso en la carpeta con el nombre de &lt;code&gt;Strings&lt;/code&gt; o &lt;code&gt;cadenas&lt;/code&gt; en español.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UBUSW1o5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gu9nmstwwrq9kfi85n7b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBUSW1o5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gu9nmstwwrq9kfi85n7b.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y por cada texto en el formulario o mensaje de alerta en el formulario procedemos hacer una propiedad o fila en el archivo de recurso, para agregar una propiedad se debe abrir el archivo de recurso.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yWaTjLT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzagszhnf1h7wc4wsouk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yWaTjLT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzagszhnf1h7wc4wsouk.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vgjKDCcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v2jwq8mx2wwhyogg8gve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vgjKDCcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v2jwq8mx2wwhyogg8gve.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x7l2Xd-T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsmxzrzxk07j36a4nmhs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x7l2Xd-T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsmxzrzxk07j36a4nmhs.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez tengamos el archivo procedemos hacer un archivo resx por cada lenguaje con las mismas propiedad, pero se llamará cómo el archivo anterior pero con un punto y el código de lenguaje, así :&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lQJ3WFkk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gs9atab29zhwafacrt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lQJ3WFkk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gs9atab29zhwafacrt8.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El código del lenguaje es la unión de la abreviatura del idioma más un    "-" seguido de la abreviatura del país, la abreviatura del idioma en minúscula y la del país en mayúscula.&lt;/p&gt;

&lt;p&gt;Ejemplo, el idioma Ingles es "en" y el país de Estados Unido es "US" entonces  el idioma ingles de estados unidos queda así "en-US" &lt;a href="http://utils.mucattu.com/iso_639-1.html"&gt;clic aquí para ver los código de los idiomas&lt;/a&gt; y &lt;a href="https://traduciresdescubrir.wordpress.com/2012/07/26/paises-y-abreviaturas"&gt;clic aquí para ver la abreviatura de todos los paises&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez tengamos el archivo por cada lenguaje, lo que procedemos hacer el cargar el idioma al cargar el formulario.&lt;/p&gt;

&lt;p&gt;con esta línea cambiamos el lenguaje de la aplicación&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pero antes de crear un método que cargue el idioma necesitamos guardar el idioma que el programa tuvo antes de cerrarse para que al volverlo abrir se cargue de nuevo.&lt;/p&gt;

&lt;p&gt;eso lo hacemos creado una propiedad para guardar el idioma, sino sabes cómo hacerlo, mira este vídeo.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/GTjpy2W4Q6g"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TSqhooVK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/633gj44sw01idkdgruz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TSqhooVK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/633gj44sw01idkdgruz6.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;creamos un método que cargue el idioma al cargar el formulario&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  public void CargarIdioma()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Settings.Default.Idioma);
            lblLenguaje.Text = Strings.lblLenguaje;
            lblnuevo.Text = Strings.lblnuevo;
            ckActivo.Text = Strings.ckActivo;
            btnMensaje.Text = Strings.btnMensaje;
            this.Text = Strings.titulo;
            btnAplicar.Text = Strings.btnAplicar;

        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al cambiar el idioma, cambiamos la configuración  y volvemos a cargar el idioma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Settings.Default.Idioma = "en-US";
  CargarIdioma();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Settings.Default.Idioma = "es-CO";
  CargarIdioma();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;al cerrar el formulario debemos guardar el último idioma que se seleccionó&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings.Default.Save();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Trucos
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1- Crear una clases que controles los idiomas
&lt;/h2&gt;

&lt;p&gt;Creamos una clase con todos los atributos de un idioma y un método estático que devuelta todos los idiomas.&lt;/p&gt;

&lt;p&gt;Clase : &lt;code&gt;Idioma.cs&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Idioma
    {
        public String Nombre { get; set; }
        public String Abreviacion{ get; set; }
        public String Pais { get; set; }
        public String AbreviacionPais{ get; set; }

        public String NombrePais
        {
            get
            {
                return Nombre + "(" + Pais + ")";

            }
        }
        public String CultureInfo
        {
            get
            {
                return Abreviacion + "-" + AbreviacionPais;
            }
        }

        public static List&amp;lt;Idioma&amp;gt; ObtenerIdiomas()
        {
            return new List&amp;lt;Idioma&amp;gt; {
                new Idioma
                {
                    Nombre = "Español",
                    Abreviacion = "es",
                    Pais = "Colombia",
                    AbreviacionPais = "CO"
                },
                 new Idioma
                {
                    Nombre = "English",
                    Abreviacion = "en",
                    Pais = "Estados Unidos",
                    AbreviacionPais = "US"
                },
                  new Idioma
                {
                    Nombre = "português",
                    Abreviacion = "pt",
                    Pais = "Brazil",
                    AbreviacionPais = "BR"
                }
            };
        }

        public static void CambiarTexto(Control.ControlCollection controls)
        {
            foreach (Control c in controls)
            {
                if(c is Panel)
                {
                    CambiarTexto(c.Controls);
                }
                else
                {
                    String text = Strings.ResourceManager.GetString(c.Name);
                    if (text != null)
                    {
                        c.Text = text;
                    }
                }

            }
        }

    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para llenar un combobox sería así :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  public void LlenarIdiomaCombobox()
        {
            comboBox1.DataSource = Idioma.ObtenerIdiomas();
            comboBox1.DisplayMember = "Nombre";
            comboBox1.ValueMember = "CultureInfo";
        } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XG5aIADJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j8bpo4i1xqt260ru5inr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XG5aIADJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j8bpo4i1xqt260ru5inr.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;otra forma es :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  public void LlenarIdiomaCombobox()
        {
            comboBox1.DataSource = Idioma.ObtenerIdiomas();
            comboBox1.DisplayMember = "NombrePais";
            comboBox1.ValueMember = "CultureInfo";
        } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--quWI2OLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0uf74xpfmru9ui92et95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--quWI2OLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0uf74xpfmru9ui92et95.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cargar los idiomas dinámicamente, el único requisito es que el nombre del control se debe  llamar igual que la propiedad del archivo de recurso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    public void CargarIdioma()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Settings.Default.Idioma);
            Idioma.CambiarTexto(this.Controls);
            this.Text = Strings.titulo;

        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2- Instalar ResXManager
&lt;/h2&gt;

&lt;p&gt;Instalar la extensión desde el menú de Herramientas, descargas la extensión y cierras visual studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IY7JZmwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ldzp4xigmxpvf3ilkaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IY7JZmwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ldzp4xigmxpvf3ilkaw.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;presionas en modificar (Modify) y luego en finalizar tarea (end Task).&lt;/p&gt;

&lt;p&gt;luego vamos donde están los idiomas, clic derecho en uno de ellos y luego clic izquierdo para desplegar las opciones y luego lo abrimos con la extensión&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h27qFymq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zcmhc741k6ndo960pekd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h27qFymq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zcmhc741k6ndo960pekd.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;luego puedes ver y editar todos los idiomas al mismo tiempo y agregar un nuevo idioma&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QvtMpK3f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqjs4no5xvq7wli1km43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QvtMpK3f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqjs4no5xvq7wli1km43.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
    </item>
    <item>
      <title>Cómo obtener el color que esta debajo del cursor del mouse en C#</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Wed, 12 May 2021 21:39:04 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-obtener-el-color-que-esta-debajo-del-cursor-del-mouse-21ej</link>
      <guid>https://dev.to/juandiegows/como-obtener-el-color-que-esta-debajo-del-cursor-del-mouse-21ej</guid>
      <description>&lt;p&gt;Para obtener el color de bajo del cursor del mouse solo agregamos este código al formulario&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[DllImport("user32.dll")]
private static extern bool GetCursorPos(ref Point lpPoint);


[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern int BitBlt(IntPtr hDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Importamos todas las librerías necesaria.&lt;/p&gt;

&lt;p&gt;Primero obtenemos la pantalla&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bitmap screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y creamos este método para obtener el color&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
public Color GetColor(Point location)
        {
            using (Graphics gdest = Graphics.FromImage(screenPixel))
            {
                using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
                {
                    IntPtr hSrcDC = gsrc.GetHdc();
                    IntPtr hDC = gdest.GetHdc();
                    int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy);
                    gdest.ReleaseHdc();
                    gsrc.ReleaseHdc();
                }
            }

            return screenPixel.GetPixel(0, 0);
        }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>design</category>
    </item>
    <item>
      <title>Cómo hacer que el tamaño del formulario cambie cuando el borde es "none" en C#</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Wed, 12 May 2021 21:08:15 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-hacer-que-el-tamano-del-formulario-cambie-cuando-el-borde-es-none-24ke</link>
      <guid>https://dev.to/juandiegows/como-hacer-que-el-tamano-del-formulario-cambie-cuando-el-borde-es-none-24ke</guid>
      <description>&lt;p&gt;Copiamos y pegamos este código en el formulario que queremos que se pueda redimensionar su tamaño.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; protected override void WndProc(ref Message m)
        {
            const int RESIZE_HANDLE_SIZE = 10;

            switch (m.Msg)
            {
                case 0x0084/*NCHITTEST*/ :
                    base.WndProc(ref m);

                    if ((int)m.Result == 0x01/*HTCLIENT*/)
                    {
                        Point screenPoint = new Point(m.LParam.ToInt32());
                        Point clientPoint = this.PointToClient(screenPoint);
                        if (clientPoint.Y &amp;lt;= RESIZE_HANDLE_SIZE)
                        {
                            if (clientPoint.X &amp;lt;= RESIZE_HANDLE_SIZE)
                                m.Result = (IntPtr)13/*HTTOPLEFT*/ ;
                            else if (clientPoint.X &amp;lt; (Size.Width - RESIZE_HANDLE_SIZE))
                                m.Result = (IntPtr)12/*HTTOP*/ ;
                            else
                                m.Result = (IntPtr)14/*HTTOPRIGHT*/ ;
                        }
                        else if (clientPoint.Y &amp;lt;= (Size.Height - RESIZE_HANDLE_SIZE))
                        {
                            if (clientPoint.X &amp;lt;= RESIZE_HANDLE_SIZE)
                                m.Result = (IntPtr)10/*HTLEFT*/ ;
                            else if (clientPoint.X &amp;lt; (Size.Width - RESIZE_HANDLE_SIZE))
                                m.Result = (IntPtr)2/*HTCAPTION*/ ;
                            else
                                m.Result = (IntPtr)11/*HTRIGHT*/ ;
                        }
                        else
                        {
                            if (clientPoint.X &amp;lt;= RESIZE_HANDLE_SIZE)
                                m.Result = (IntPtr)16/*HTBOTTOMLEFT*/ ;
                            else if (clientPoint.X &amp;lt; (Size.Width - RESIZE_HANDLE_SIZE))
                                m.Result = (IntPtr)15/*HTBOTTOM*/ ;
                            else
                                m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ;
                        }
                    }
                    return;
            }
            base.WndProc(ref m);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x20000; // &amp;lt;--- use 0x20000 
                return cp;
            }
        }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Cómo hacer que tu Formulario se mueva cuando se le quitan los bordes en c#</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Wed, 12 May 2021 21:00:25 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-hacer-que-tu-formulario-se-mueva-cuando-se-le-quitan-los-bordes-2k2</link>
      <guid>https://dev.to/juandiegows/como-hacer-que-tu-formulario-se-mueva-cuando-se-le-quitan-los-bordes-2k2</guid>
      <description>&lt;p&gt;Lo primero es quitar el Borde al formulario.&lt;/p&gt;

&lt;p&gt;Copiamos y pegamos este código  en el formulario&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private extern static void ReleaseCapture();

[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private extern static void SendMessage(System.IntPtr hwnd, int wmsg, int wparam, int lparam);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Importamos las librerías que nos pida importar  y en el evento de MouseDown desde el control que queremos que se mueva el formulario copiamos este código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ReleaseCapture();
SendMessage(this.Handle, 0x112, 0xf012, 0);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;si queremos que al presionar clic derecho en un panel se pueda mover el formulario, simplemente copiamos el código anterior en el evento MouseDown del panel, aplica lo mismo para Label, Button y todos los controles.&lt;/p&gt;

&lt;p&gt;Si quieres ver cómo se puede cambiar el tamaño del formulario cuando se le quita los bordes mira esta publicación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/juandiego/como-hacer-que-el-tamano-del-formulario-cambie-cuando-el-borde-es-none-24ke"&gt;clic aquí&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Mis redes
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.facebook.com/eljuandi.mejiamaestre"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.instagram.com/eljuandi36_"&gt;Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/channel/UCBruvsN18FvqNHSHe7E6WWg"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>design</category>
    </item>
    <item>
      <title>Cómo cambiar el color de una imagen SVG en C#</title>
      <dc:creator>Juan Diego Mejía Maestre</dc:creator>
      <pubDate>Wed, 12 May 2021 02:38:23 +0000</pubDate>
      <link>https://dev.to/juandiegows/como-cambiar-el-color-de-una-imagen-svg-en-c-1j5m</link>
      <guid>https://dev.to/juandiegows/como-cambiar-el-color-de-una-imagen-svg-en-c-1j5m</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rRdPzts7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw335mu2oj4m8r2b3jgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rRdPzts7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw335mu2oj4m8r2b3jgv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos aprender a cambiar el color de una imagen SVG en un proyecto de visual studio 2017, 2019 en C#.&lt;/p&gt;

&lt;p&gt;Lo primero es crear nuevo proyecto y crear un diseño que nos permita cambiar el color a una imagen SVG.&lt;/p&gt;

&lt;h3&gt;
  
  
  Así
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ki8H4rUO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mdkpcr0ehash03ghsbd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ki8H4rUO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mdkpcr0ehash03ghsbd3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cómo estos componentes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oivPCosm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/majahkvqaqotg88cxjl4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oivPCosm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/majahkvqaqotg88cxjl4.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*** Link del proyecto *** &lt;a href="https://github.com/JuanDiegogit/CambiarColorImagenSVG"&gt;https://github.com/JuanDiegogit/CambiarColorImagenSVG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si te preguntas cómo se hacen los botones redondeado, para eso instalamos Guna.ui2&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nb3L-wYa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unb2j86oe677xhpcr076.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nb3L-wYa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unb2j86oe677xhpcr076.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez tengamos el Diseño, lo siguiente a realizar es la instalación del paquete de &lt;em&gt;SVG&lt;/em&gt; desde el administrador de paquete de visual studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--au1ZRY_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8er63j9rg2bp2im0oekr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--au1ZRY_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8er63j9rg2bp2im0oekr.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y buscar el paquete SVG para posteriormente instalarlo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Is0bUTUO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3qpa3isga9b3tl0kkbfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Is0bUTUO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3qpa3isga9b3tl0kkbfz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez instalado el paquete procedemos a crear una Clase llamada "SVGParser.cs" dentro de una carpeta "SVG", la clase la puedes llamar cómo desees pero debe cumplir la misma función (obtener y ajustar el archivo SVG y convertir el archivo SVG a Bitmap) y debe ser estática.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8TsMeKXw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62d1kju6qrsfym4mnth8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8TsMeKXw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62d1kju6qrsfym4mnth8.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
Vamos a ver que contiene la clase &lt;code&gt;SVGparser.cs&lt;/code&gt;&lt;br&gt;
Esta propiedad nos dice el tamaño que tenga la imagen&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static Size MaximSize { get; set; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este método convierte una imagen SVG a un Bitmap&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static Bitmap GetBitmapFromSVG(string filePath)
{
SvgDocument svgDocument = SVGParser.GetSvgDocument(filePath);
Bitmap bitmap = svgDocument.Draw();
return bitmap;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este método ajusta el archivo SVG respeto al tamaño máximo del contenedor que se define al asignar la propiedad &lt;code&gt;MaximSize&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private static SvgDocument AdjustSize(SvgDocument document)
{
document.Width = MaximSize.Width;
document.Height = MaximSize.Height;
return document;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este último abre el archivo SVG y lo ajusta con el método anterior&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static SvgDocument GetSvgDocument(string filePath)
{
SvgDocument document = SvgDocument.Open(filePath);
return AdjustSize(document);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ya con esto hemos terminado la clase  &lt;code&gt;SVGparser.cs&lt;/code&gt; el resto de la programación se hará en el formulario.&lt;/p&gt;

&lt;p&gt;En el evento de clic del botón de buscar Abrimos el archivo SVG&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P4Z6Eful--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k8jhulikw4aylxzpxghg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4Z6Eful--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k8jhulikw4aylxzpxghg.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;nota&lt;/strong&gt;&lt;br&gt;
La parte naranja es un PictureBox, solo que tiene el mismo fondo del formulario y no se nota a simple vista.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FK3bdUl4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/689fd3dozgfj0md6nxh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FK3bdUl4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/689fd3dozgfj0md6nxh1.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Declaración de variables
private string selectedPath;
private Svg.SvgDocument svgDocument;

 private void AbrirSVG()
        {
            DialogResult selectResult = filePicker.ShowDialog();
            if (selectResult == System.Windows.Forms.DialogResult.OK)
            {

                SVGParser.MaximSize = new Size(pickImagen.Width, pickImagen.Height);
                selectedPath = filePicker.FileName;
                txtBuscar.Text = selectedPath;
                svgDocument = SVGParser.GetSvgDocument(selectedPath);
                nupAncho.Value = (int) svgDocument.Width.Value;
                nupAlto.Value = (int)  svgDocument.Height.Value;
                pickImagen.Image = SVGParser.GetBitmapFromSVG(selectedPath);
                Guardar.FileName = filePicker.FileName;
            }
        }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos una método que nos permita cambiar un color por otro en el archivo SVGDocument.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;foreach (Svg.SvgElement item in svgDocument.Children)
{
ChangeFill(item, btnColorOrigen.BackColor, btnColorDestino.BackColor);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private void ChangeFill(SvgElement element, Color sourceColor, Color replaceColor)
        {
            try
            {
                if (element is SvgPath)
                {

                    if (((element as SvgPath).Fill as SvgColourServer).Colour.ToArgb() == sourceColor.ToArgb())
                    {
                        (element as SvgPath).Fill = new SvgColourServer(replaceColor);
                    }
                }
            }
            catch (Exception)
            {


            }

            if (element.Children.Count &amp;gt; 0)
            {
                foreach (var item in element.Children)
                {
                    ChangeFill(item, sourceColor, replaceColor);
                }
            }

        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>svg</category>
      <category>codigolimpio</category>
    </item>
  </channel>
</rss>
