Visualizzazione post con etichetta Grafica. Mostra tutti i post
Visualizzazione post con etichetta Grafica. Mostra tutti i post

venerdì 14 marzo 2014

Controllo Automatico Data e Ora inserito in un Label , MaskTextBox e TextBox C#

Capita spesso di dover eseguire dei controlli sul testo contenuto in un Label, TextBox o MaskTextBox e nel dover dare un feedback all'utente nella correttezza dei dati inseriti. In aiuto in questo caso ci arrivano le regole REGEX che tramite una stringa di formattazione andiamo a controllare il testo che l'utente ha inserito e a segnalarli qualche errore.
L'esempio seguente mostra come controllare due campi, uno data e l'altro orario, e come viene segnalato all'utente tramite una colorazione rossa o bianca la correttezza dei dati inseriti. Il codice è poi inserito all'interno dell'evento di "TextChanged" del controllo in modo da avere un riscontro in tempo reale ad ogni carattere inserito.


Code:
void mTextBoxOra_TextChanged(object sender, SystemEventArgs e)
{
    Regex OraFormat = new Regex(@"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]#CODE#quot;);

    if (!OraFormat.Match(mTextBoxOra.Text).Success)
    {
        mTextBoxOra.BackColor = Color.Coral;
    }
    else
    {
        mTextBoxOra.BackColor = Color.White;
    }
}

void mTextBoxData_TextChanged(object sender, SystemEventArgs e)
{
    Regex DataFormat = new Regex(@"^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))#CODE#quot;);

    if (!DataFormat.Match(mTextBoxData.Text).Success)
    {
        mTextBoxData.BackColor = Color.Coral;
    }
    else
    {
        mTextBoxData.BackColor = Color.White;
    }
}

mercoledì 16 ottobre 2013

Concatenare immagini Bitmap C#

Ecco un esempio di codice per concatenare tra loro 2 o più immagini:


Code:
//Concatenate Image in Horizontal
private Bitmap ConcatenateImage(IList<Bitmap> ListImage)
{
 int ImWidth = 0;

 for (int i = 0; i < ListImage.Count(); i++)
 {
  ImWidth = ImWidth + ListImage[i].Width;
 }

 Bitmap bmpfinal = new Bitmap(ImWidth, ListImage[0].Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

 Graphics gr = Graphics.FromImage(bmpfinal);

 gr.DrawImage(ListImage[0], new System.DrawingPoint(0, 0));
 for (int i = 1; i < ListImage.Count(); i++)
 {
  gr.DrawImage(ListImage[i], new System.DrawingPoint(ListImage[i - 1].Width, 0));
 }

 gr.Dispose();
 
 return bmpfinal;
}<!--[if IE]>

Convertire immagini Bitmap in ImageSource

Il seguente codice converte un immagine in formato Bitmap in formato ImageSource:



Code:
//Convert Bitmap to ImageSource
public ImageSource ToImageSource(System.DrawingBitmap source)
{
 BitmapSource bitSrc = null;

 var hBitmap = source.GetHbitmap();

 try
 {
  bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
   hBitmap,
   IntPtr.Zero,
   Int32Rect.Empty,
   BitmapSizeOptions.FromEmptyOptions());
 }
 catch
 {
  bitSrc = null;
 }
 finally
 {
  NativeMethods.DeleteObject(hBitmap);
 }

 return bitSrc;
}

//Class Utility
internal static class NativeMethods
{
 [DllImport("gdi32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 internal static extern bool DeleteObject(IntPtr hObject);
}

Cosa molto importante è la cancellazione dell'oggetto tramite la classe "NativeMethods" altrimenti potreste avere problemi di memoria.

martedì 8 ottobre 2013

Aggiornamento interfaccia grafica C# da thread secondario

Aggiornamento interfaccia grafica Windows form da un thread secondario:


Code:
void ThreadSecondario(object sender, EventArgs e)
{
 if (this.InvokeRequired)
 {
  Invoke(new MethodInvoker(delegate() { ThreadSecondario(sender, e); }));
 }
 else
 {
  AggiornaValori(sender);
 }
}

void AggiornaValori(object sender)
{
 //Aggiornamento valori form
}

Aggiornamento interfaccia grafica WPF da un thread secondario:


Code:
using System.Windows.Threading;

private delegate void AggiornaValoriDelegate(object sender);
void ThreadSecondario(object sender, EventArgs e)
{
 Dispatcher.BeginInvoke(DispatcherPriority.Normal, new AggiornaValoriDelegate(AggiornaValori), sender);
}
void AggiornaValori(object sender)
{
 //Aggiornamento valori controlli WPF
}