|
1. by using a combination of docked controls, and other controls that are anchored, you can achieve pretty good proportional UI re-sizing in WinForms.
2. you will not achieve good quality arbitrary proportional font re-sizing in WinForms because of changes in font rendering: fonts are rendered clearly in certain fixed "quantum state sizes" ... you want more than that, use WPF, where fonts, like everything else, get run through the vector graphic engine.
I will respond further if you start giving details of your UI structure, and get specific. Describe what AutoSizeMode setting you are using; describe what is docked, and not docked.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Hi,
Thank you for your help and advise.
i am trying to create a class to justify all of the components of the forms and user controls (each one of them, separately). I think it is possible. when i try to use from anchoring or docking, with resizing the form or user control, for instance, textBoxes will go under Buttons (some of them will move). my aim is to justify all controls belongs to a parent while resizing the parent with mouse movement and maximizing.
thanks a million to care about my question.
|
|
|
|
|
Member 13325846 wrote: textBoxes will go under Buttons (some of them will move). Changing the z-order at run-time: you don't want to go there.
While I have a sense of what you want to do, you are not specific enough for me to offer further comment.
You did not respond to the issue I raised about the problems of trying to scale fonts in WinForms.
I suggest you make three visual mock-ups showing the initial UI state, and that initial state sized larger, and smaller. Post links to those pictures here.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
According the the discussion until now and the given answers and comments :
If you want to resize controls when resizing the container-control (Form, Panel, Usercontrol and so on) you have to memorize the location of each control and it's size depending on the Master-Form.
If you now resize the Form each control in it must shrink or grow and each location must be shifted - depending on the changes. For this Anchors and so on are now helpful. You need to create a method which is called with the Form.SizeChanged-Event.
If you do it like this you should know, that not every Control does a properly resizing. Also it will be possible that the look becomes very strange.
|
|
|
|
|
As I read Adam Storr - Playing with C# 7 - Deconstruct, I kept hoping that it would answer at long last the question of how to do with in C#. Alas, it fell short again.
Does anybody besides me wish that C# supported with blocks, or have I overlooked a seriously underused language feature?
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
No. I don't miss basic (in any of it's evil forms) either.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I don't miss Basic, either, but I miss that construct, which came to my attention when it became part of VBA as it manifested in Microsoft Access 2.0.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Real men don't code in VB, or use any of its bastard constructs, such as with or goto .
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
Not even slightly.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Surely, you jest.
with Foo {
.Bar = 123;
.Baz = @"Zap!";
.Goo = 3.14159;
.Ergo = 1.1414141414l4;
}
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Nope, don't miss it at all.
With Intellisense, it's really not needed (and Intellicode is even better at it) - I'd rather be able to see what I'm dealing with than hunt back through code to find out what I'm affecting (and if I move or copy code that could lead to trouble).
Why would you think you need it? It's bad enough that the terminally lazy use var for everything making maintenance hard enough - do we really need other VB "they can't handle the truth" constructs as well?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I agree that I can do without most of it. However, as I've adapted it (see illustration), it seems to me that it is very much in harmony with the spirit of C#, which favors brevity whenever it makes sense.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Speaking of hunting back through the code, C# 7 gives us this little gem:
if (int.TryParse(input, out int result))
Console.WriteLine(result);
else
Console.WriteLine("Could not parse input");
You get to declare variables in the call to TryParse, or any other method that takes out parameters.
I no likey. I would class this as one of C#'s little "you can't handle the truth" constructs. The docs says it makes the code easier to read. I respectfully disagree.
|
|
|
|
|
Dave Kreskowiak wrote: I respectfully disagree.
Well, of course you would. It should obviously be:
if (int.TryParse(input, out var result)) ...
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I can see what they are trying to do - scope the variable to just the code where the result is actually valid:
{
int result;
if (int.TryParse(input, out result))
Console.WriteLine(result);
else
Console.WriteLine("Could not parse input");
} Only it's out of scope in the else block.
And that does make some good sense.
But it is ugly - I'll get used to it and it should improve reliability in the long term.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
The scope of result isn't just the true side of the if statement. It's everywhere in the parent scope after the if statement, except for the else block. Get some noob writing a 500 line method and you run into that same problem where you're hunting for where the variable is declared.
|
|
|
|
|
Hi Dave, I, also, find the in-line 'out variable declaration ... and its persistence beyond what my habitual perceptions suggest should be limited scope ... jarring.
I think it needs a little more spice to be really useful in creating FUD:
Console.WriteLine($"result: {(int.TryParse(input, out var result) ? result.ToString() : "no")}"); The fact that the in-line 'result variable will persist even in this example ... don't feel right. And, use of 'var in this case seems, intuitively, wrong.
But, perhaps these little frissons of cognitive dissonance are just evidence for the old conundrum of 'old dogs cannot learn new tricks' ?
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
That code is ..... disturbing.
I think about half the new features showing up in C# now are just for syntactic sugar. This is one where I think the community of old-timers would be split on its usefulness vs how many people would actually use it.
I'd be interested in seeing any telemetry on its use.
|
|
|
|
|
Foo.Bar = 123;
Foo.Baz = @"Zap!";
Foo.Goo = 3.14159;
Foo.Ergo = 1.1414141414l4; is two lines shorter
noop()
|
|
|
|
|
So? How many more characters, each requiring a keystroke, does your proposal require?
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Considering a new line is two-characters long on Windows (CrLf):
* -5 (with ) on the first line
* -4 ( }CrLf ) on the first line
* -3 (}CrLf ) on the last line
So 12 characters less, plus three times Foo -> -12 + 9 = -3
In the end, mine seems 3 characters shorter than yours.
But the number of characters is not really important; I do not feel the with construct makes the code clearer, just more bloated.
noop()
|
|
|
|
|
Used it mostly in Visual FoxPro; and in VB.
Less code; clearer outlines; more generic possibilities.
Yep; totally useless.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
You really want 'With in C#: [^]. This hack uses reflection ... I'd never use it in production code: [^]
And, now, the "sermon:" I think it's a mistake to try and "bend" C# to fit your background in another language. At the same time, imho, most people will, in the first phase of learning, look for, expect, things/structures through mental habits conditioned by other languages. I believe (hypothesis) that programmers often have a kind of imprinting/bonding experience with the first language they learn well.
Surrender !
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
modified 18-May-19 11:54am.
|
|
|
|
|
Did you see my terse example? Do you like typing the class name in front of every member name in a code block that sets ten properties one after another?
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Did I see the code sample that would never compile [^]: yes. Did I see a reference in another post you made to something "illustrated" without explanation: yes.David A. Gray wrote: Do you like typing the class name in front of every member name in a code block that sets ten properties one after another? I do not see how this "sucker-punch question" is relevant to anything discussed here
Beginning with the object initializer syntax in C# (C# 3.0, .NET 3.5), initializing a bunch of whatever when a new object was created became much easier. What's your issue here ?
If you want to simulate 'With, techniques are well known, for a long time (see my post here). Now, if you have a better way, that doesn't use reflection, or the usual Extension Method: I'm all ears !
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|