Wpis z mikrobloga

obstawiam, że typ Size ma przeciążony operator =, dlatego jak przypisujesz size, to ten przeciążony operator wywołuje odrysowanie parenta. A gdy przypisujesz height, to przypisujesz inta i tam się żadna magia nie ma szans wydarzyć.

Ale trochę strzelam, bo nie uraczyłeś nas zbyt wieloma szczegółami.
@sasik520: Ale jak próbuję przypisać do Size.Height wartość typu float, to wywala warna o rzutowaniu na int, więc wnioskuję, że Size.Height jest typu int. Jakie szczegóły jeszcze podać? Bo nie do końca to ogarniam ( ͡° ʖ̯ ͡°)
@sasik520: Szczerze mówiąc, to nawet nie wiem co to za biblioteka - tworzę projekt CLR i tyle. Co do poprzedniej odpowiedzi - chodzi Ci o to, że operator = wywołuje jakąś metodę, która zmienia rozmiar wykresu?
@6502: tak, ale to jednak nie to.

C++/CLI ma coś takiego, jak property, na wzór tych z c#:

https://www.codeproject.com/Articles/10352/C-CLI-Properties-Syntactic-sugar-for-accessor-meth

I jak sobie zobaczysz np. tu https://msdn.microsoft.com/pl-pl/library/system.windows.forms.datavisualization.charting.chart.size(v=vs.110).aspx pole Size jest właśnie property. Czyli setter pola Size w klasie Chart wywołuje zapewne jakiś resize. Tymczasem setter pola Height klasy Size (trochę zgaduję/domyślam się, bo w życiu napisałem tylko kilka linijek c++/cli i to nie była aplikacja okienkowa) nie ma jak wywołać tego resize,
@6502: @sasik520:
To raczej nie powinno się kompilować. Size jest typu value struct czyli w tym miejscu:

this->chart->Size // rozumiejąc to jako getter

zmienna jest zwracana przez wartość a nie referencję. Masz zatem tworzony nowy, anonimowy (tymczasowy) obiekt typy Size.
Zatem pisząc coś takiego:

this->chart->Size.Height=...

próbujesz zmienić wartość pola tego nowo stworzonego obiektu, a nie oryginału.
@ly000:
W takim razie jak uzyskać dostęp do pojedynczego pola? Chodzi mi o to, żeby wielkość wykresu była uzależniona od aktualnej wielkości okna, powiedzmy 50%. Dla typu size operator * nie jest przeciążony, więc nie mogę napisać po prostu:
this->chart1->Size=this->Size*0.5;
@6502: np tak:
this->chart1->Size = System::Drawing::Size(this->chart1->Size.Width * 0.5, this->chart1->Size.Height * 0.5);
Tylko nie jestem pewien czy składnia się zgadza, bo nie używałem tego języka od wielu lat.