Avatar billede friiiiis Novice
30. april 2014 - 13:19 Der er 12 kommentarer og
1 løsning

With ... DO

Hej,

I Delphi kan man lave en With XXX do

altså f.eks.:

With this.tChart1 do
{
  Series.clear();
  Series.RemoveAllSeries();
}

Kan man lave noget tilsvarende i C#??

I koden herunder skal jeg gentage this.tChart1 MANGE gange og det bliver altså irriterende... Der vilo jeg gerne bruge en with do

            this.tChart1.Series.Clear();
            this.tChart1.Series.RemoveAllSeries();
            this.tChart1.BackColor = Color.White;
            this.tChart1.Walls.Back.Gradient.Visible = false;
            this.tChart1.Walls.Back.Color = Color.White;
            this.tChart1.Walls.Bottom.Gradient.Visible = false;
            this.tChart1.Walls.Bottom.Color = Color.White;
            this.tChart1.Panel.Gradient.Visible = false;
            this.tChart1.Panel.Color = Color.White;
            this.tChart1.Aspect.View3D = false;
            this.tChart1.Panel.Bevel.Outer = Steema.TeeChart.Drawing.BevelStyles.None;
            this.tChart1.Axes.Left.Automatic = true;
            this.tChart1.Axes.Bottom.Automatic = true;
            this.tChart1.Axes.Left.Title.Caption = "";
            this.tChart1.Axes.Bottom.Title.Caption = "";
            this.tChart1.Header.Text = "";
            this.tChart1.Legend.Visible = false;
            this.tChart1.Legend.Shadow.Visible = false;
            this.tChart1.Legend.Font.Size = 14;
            this.tChart1.Legend.Symbol.Width = 50;
            this.tChart1.Legend.Symbol.Squared = true;
Avatar billede montago Praktikant
30. april 2014 - 13:30 #1
så det du siger er at du enten er doven eller ikke gider kigge på en masse kode-gentagelser ?

du kan uden problemer skrive:

var TC = this.tChart1; //<-- kopiere reference

            TC.Series.Clear();
            TC.Series.RemoveAllSeries();
            TC.BackColor = Color.White;
            TC.Walls.Back.Gradient.Visible = false;
            TC.Walls.Back.Color = Color.White;
            TC.Walls.Bottom.Gradient.Visible = false;
            TC.Walls.Bottom.Color = Color.White;
            TC.Panel.Gradient.Visible = false;
            TC.Panel.Color = Color.White;
            TC.Aspect.View3D = false;
            TC.Panel.Bevel.Outer = Steema.TeeChart.Drawing.BevelStyles.None;
            TC.Axes.Left.Automatic = true;
            TC.Axes.Bottom.Automatic = true;
            TC.Axes.Left.Title.Caption = "";
            TC.Axes.Bottom.Title.Caption = "";
            TC.Header.Text = "";
            TC.Legend.Visible = false;
            TC.Legend.Shadow.Visible = false;
            TC.Legend.Font.Size = 14;
            TC.Legend.Symbol.Width = 50;
            TC.Legend.Symbol.Squared = true;
Avatar billede kalp Novice
30. april 2014 - 13:51 #3
var TC = this.tChart1; //<-- kopiere reference

er ikke en kopi af referencen, men betyder at TC og tChart1 nu peger på præcis det samme.

Der er mange måder at sætte default værdier på et objekt, men ovenstående virker umiddelbart forkert.
Avatar billede montago Praktikant
30. april 2014 - 14:00 #4
this.tChart1 er en reference til et sted i memory hvor objektet befinder sig (Value)

ved at sige TC = this.tChart1, så kopiere man referencen så begge variable pejer på samme memorysted.

ergo hedder det også "copy by reference" eller på dansk kopi af referencen.

havde det været værdien (fx med structs) fx:

var a = 5;
var b = a;

så er det copy by value.
Avatar billede kalp Novice
30. april 2014 - 14:14 #5
Netop:)
Hvis de peger på samme sted i memory og du retter på dette, så påvirkes begge referencer.

Det vil sige at når han gør følgende:

this.tChart1.Axes.Left.Title.Caption = "Jeg er tChart1";
TC.Axes.Left.Title.Caption = "Jeg er TC";

så vil både tChart og TC have "Jeg er TC" stående i caption.

- men hvis det er det spørger vil have så er det jo fint og blot mig som har misforstået spørgsmålet:)
Avatar billede montago Praktikant
30. april 2014 - 14:16 #6
/me tager sig til hovedet...
Avatar billede friiiiis Novice
30. april 2014 - 14:20 #7
Tja, hvis jeg forstår det rigtigt så er TC en pointer og det er det jeg gerne vil have..

Dvs. hvis jeg ændrer i properties til TC så vil det også ændre i properties til tChart...
Avatar billede montago Praktikant
30. april 2014 - 14:26 #8
nemlig..

C# er default copy by reference ved objekter og byvalue på structs.
Avatar billede kalp Novice
30. april 2014 - 14:35 #9
montago du behøver skam ikke tage dig til hovedet;)
Min pointe var blot om det overhovedet var det spørger ønskede - og det var det så:)
Derfor er alt ok!
Avatar billede arne_v Ekspert
30. april 2014 - 19:39 #10
WITH er en feature som opfundet i Pascal og som de fleste sprog i Pascal familien har bl.a Modula-2 og Oberon, men Ada har den dog ikke.

WITH er ikke originalt en del af BASIC, men MS tilfoejede det til Visual Basic familien.

WITH er naesten ukendt i C familien - hverken C, C++, Java eller C# har den. JavaScript har den, men den er ikke velset blandt JavaScript programmoerer (deprecated).

Personligt synes jeg at det er en glimrende feature, men .....
Avatar billede friiiiis Novice
02. maj 2014 - 08:11 #11
Hej Arne_V,

Tja, som sædvanligt nogle fine kommentarer men jeg har allerde givet point - vil du gerne at jeg opretter endnu et spørgsmål som du så kan få point for??
Avatar billede arne_v Ekspert
02. maj 2014 - 18:07 #12
Andre har svaret paa det du spurgte om nemlig hvordan du i C# laver det som du laver i Pascal med WITH.

Jeg har bare forklaret lidt om den historiske baggrund for WITH.

Saa ingen grund til at give mig point.
Avatar billede montago Praktikant
04. maj 2014 - 23:26 #13
Using i C# minder lidt om With med den forskel at deklarationen kun eksistere i scope og bliver disposed..

Brugen minder dog lidt om hinanden men med andre formål.

Som Arne siger er With en rar feature, men pga. Måden C# skrives på savner man den ikke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester