Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot modify expression because it is not a variable

I'm trying to get an UserControl (which has a grid on it) on a Windows Form to resize. The below code is what I have in the Form. The behavior I'm getting is that the control is resized when I make it big. But it does not shrink. What am I doing wrong (or) What am I missing?

private void AdjustGrid()
{
    ZoomControl.Location = new Point(5, 5);
    ZoomControl.Size = new Size(this.Width - 15, this.Height - 75);
}

void zoomform_Resize(object sender, EventArgs e)
{
    AdjustGrid();
}

Now the user control has the following code:

//Resize the grid that the UserControl has on it
private void NameValuePropertyBag_Resize(object sender, EventArgs e)
{
    grdNameValueProperties.Location = new Point(4,4);
    grdNameValueProperties.Size = new Size(this.Width - 8, this.Height - 8);
}

I tried

grdNameValueProperties.Size.Width = this.Width - 8;
grdNameValueProperties.Size.Height = this.Height -8;

It gives me "Cannot modify expression because it is not a variable" error... What am I missing?

Additional Info:

I'm using SetParent() Windows call to move/zoom an UserControl to another Form (ZoomForm). Anchor doesn't seem to work for controls moved with SetParent()... More precisely, it may be working but I have repainting problems.

I got Anchor/Dock pair to working without repaint issues [I removed the resize event wireup and adjusted Dock to Fill]

The ZoomForm initally has no controls. The Usercontrol is added to the ParentForm dynamically.

Currently, I'm able to make the zoom form bigger with the above code but not smaller.

like image 439
Vyas Bharghava Avatar asked Apr 15 '09 00:04

Vyas Bharghava


2 Answers

grdNameValueProperties.Size.Width = this.Width - 8;
grdNameValueProperties.Size.Height = this.Height -8;

That code gives the error because Size is a value type, not a reference type. Reading this http://www.yoda.arachsys.com/csharp/parameters.html may help explain the difference between value types and reference types.

like image 69
Brian Ensink Avatar answered Sep 19 '22 22:09

Brian Ensink


As recursive commented, you should just use the Anchor property.

The error occurse because the Size property exposes a struct and not a reference type. The Size property returns a copy of the size object of the control. Writing to the properties Width and Hight of this copy makes no sense because it is just a temporary copy and not backed by memory anywhere.

like image 26
Daniel Brückner Avatar answered Sep 20 '22 22:09

Daniel Brückner