Raise Events

public class Time
    {
        //Denne klassen kan du test som følger fra et annet sted..
        //private void simpleButton2_Click(object sender, EventArgs e)
        //{

        //    Time t = new Time();
        //    t.TimeHasChanged += t_TimeHasChanged;
        //    t.ChangeTime();
        //}

        //void t_TimeHasChanged(object sender, TimeHasChangedEventArgs e)
        //{
        //    MessageBox.Show(e.SomeProperty);
        //}


   
        //Delegaten
        public delegate void TimeHasChangedEventHandler(object sender, TimeHasChangedEventArgs e);

        //Eventet
        public event TimeHasChangedEventHandler TimeHasChanged;

        // Metoden man benytter for å raise eventet
        protected virtual void OnTimeHasChanged(TimeHasChangedEventArgs e)
        {
            if (TimeHasChanged!=null)
            {
                //Invoke delegates
                TimeHasChanged(this, e);
            }
        }

        //En testmetode for å kunne raise eventet.
        //Vanligvis vil man raise eventet på de stedene man måtte ønske
        public void ChangeTime()
        {
            this.OnTimeHasChanged(new TimeHasChangedEventArgs() { SomeProperty = "Dette er en test" });
        }

    }

    //EventArgs klassen. Denne vil du normalt utstyre med de properties som du har behov for.
    //Dersom du ikke har behov for å sende spesielle data rundt omkring så kan du bruke EventArgs direkte
    //og ikke gå via en egen klasse som arver EventArgs
    public class TimeHasChangedEventArgs : EventArgs
    {
        public string SomeProperty { get; set; }
    }

Posted in C# | Leave a comment

Ta tiden på noe

//Start tid
DateTime startTime = DateTime.Now;

//Gjør noe
Thread.Sleep(2000);

//Stopp tid
DateTime stopTime = DateTime.Now;

//Hvor lang tid tok det.
TimeSpan duration = stopTime - startTime;
MessageBox.Show(duration.ToString());

Posted in C# | Leave a comment

C# Operators

Null-coalescing (??)
// y = x, unless x is null, in which case y = -1.
int y = x ?? -1;

Conditional operator (?:)
condition ? first_expression : second_expression;

Posted in C# | Leave a comment

Enable/Disable Resharper

Du må ikke lete i resharper menyen, men i den ordinære tools menyen.
Tools–>Options–>Resharper.

Posted in Visual Studio | Leave a comment

Debugger


List li = new List();
li.Add(new Person { FirstName = "Jeroen", LastName = "Schiøtt" });
li.Add(new Person { FirstName = "Ronny", LastName = "Gydar" });

//Vha denne attributten får vi pen informasjon i debugger.
[System.Diagnostics.DebuggerDisplay("{FirstName} {LastName}")]
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

Resultatet blir da:

Posted in C#, Visual Studio | Leave a comment

List (sortering og where)

[System.Diagnostics.DebuggerDisplay("{FirstName} {LastName} {Age}")]
 public class Person
 {
 public string FirstName { get; set; }
 public string LastName { get; set; }
 public int Age { get; set; }

public static void Sortering()
 {
 //Koden for å sortere
 List<Person> Personer = new List<Person>();
 Personer.Add(new Person { FirstName = "Abel", LastName = "Smith", Age = 34 });
 Personer.Add(new Person { FirstName = "Tony", LastName = "Andersen", Age = 30 });
 Personer.Add(new Person { FirstName = "Chris", LastName = "Kub", Age = 10 });

//Sorterer på FirstName
 List<Person> sortedList = Personer.OrderBy(x => x.FirstName).ToList();

//Sorterer på LastName
 List<Person> sortedList2 = Personer.OrderBy(x => x.LastName).ToList();

//Sorterer på Age
 List<Person> sortedList3 = Personer.OrderBy(x => x.Age).ToList();

//Sorterer på Age også på LastName
 List<Person> sortedList4 = Personer.OrderBy(x => x.Age).ThenBy(x => x.LastName).ToList();

//Legg merke til at både OrderBy og ThenBy har respektive Descending metoder.
 List<Person> sortedList5 = Personer.OrderByDescending(x => x.Age).ThenByDescending(x => x.LastName).ToList();
 }

public static void UseOfWhere()
 {
 List<Person> Personer = new List<Person>();
 Personer.Add(new Person { FirstName = "Abel", LastName = "Smith", Age = 34 });
 Personer.Add(new Person { FirstName = "Tony", LastName = "Andersen", Age = 30 });
 Personer.Add(new Person { FirstName = "Chris", LastName = "Kub", Age = 10 });

List<Person> Under30 = Personer.Where(x => x.Age < 30).ToList();

//Bruk av funksjon..
 List<Person> someitems = Personer.Where(new Func<Person, bool>(t =>
 {
 //Utav new Func<Person, bool>(t => kan vi lese
 //Dette er en funksjon som får inn Person i variabelen t
 //Funksjonen skal returnere en bool.

//Vi kan så skrive ordinær kode her..
 if (t.Age==30) return true;
 return false;
 }
 )).ToList();

//Vi kan også skrive dette litt enklere..
 List<Person> someitems2 = Personer.Where(t =>
 {
 //Vi kan så skrive ordinær kode her..
 if (t.Age == 30) return true;
 return false;
 }
 ).ToList();
 }
 }

Posted in C#, Linq | Leave a comment

Kul bruk av var

System.Data.DataTable dt = new DataTable();
dt.Columns.Add("Name");
System.Data.DataRow r = dt.NewRow();
r["Name"] = "d";

dt.Rows.Add(r);

var anon = new { Name = System.Convert.ToString( dt.Rows[0]["Name"]), Age = 34 };
//anon.Name = "Jeroen";             //Readonly. Dette funker ikke.
//List<anon> l = new List<anon>();  //Dette funker heller ikke.

//Dette funker og man har intellicence.
MessageBox.Show(anon.Name);

Posted in Uncategorized | Leave a comment

Winzip from C#

http://dotnetzip.codeplex.com

Bruk:

using (ZipFile zip = new ZipFile())
{
//Passord må settes FØR selve filen legges inn.
//Det virker som om man setter et passord pr fil i zip filen.
zip.Password = "p";
zip.AddFile("c:\\temp3\\data.txt","");
zip.Save("c:\\temp3\\ZipByCode.zip");
}

Posted in C# | Leave a comment

Visual Studio 2008 Snippets

Last ned en editor : http://snippeteditor.codeplex.com/
Dersom du skal redigere eksisterende snippets og kjører windows 7, start programmet som administrator, ellers får du problemer med skriverettigheter.

Dersom du skal lagre egne snippets så lagrer du disse i mappen:
[My documents]\visual studio 2008\code snippets\visual c#\my code snippets
De må lagres med extension .snippet

Posted in Visual Studio | Leave a comment

C# Mod eksempel

//Gi brukeren en melding for hver 50 rad.
for (int i = 0; i < 500; i++)
{
    //The modulus operator (%) computes the remainder after
    //dividing its first operand by its second.
    if (i%50==0)
    {
        this.Text="Antall rader = " + i.ToString();
    }
}

//Brukt i forbindelse med en datatable.
Int32 NrOfRows = this.MyDataTable.Rows.Count;
Int32 RowCounter = 0;
foreach (DataRow MyRow in this.MyDataTable.Rows)
{
    RowCounter += 1;
    //Viser melding for rad 1 også for hver 20 rad og til slutt for den siste raden.
    if (RowCounter % 20 == 0 || RowCounter == NrOfRows || RowCounter==1)
    {
        //Skriver en status melding.
        this.Text = "Rader overført : " + RowCounter.ToString();
    }
}

Posted in C# | Leave a comment