strategy for correcting the side-effects of using Dock (which ignore Margin settings)
-
Hi, Docking is quite useful in creating UI's, but when you Dock something: the "Margin" property settings of what you Dock are ignored. In the past, I've created several types of UI's where an "outer" Panel's ControlCollection consists solely of identical "inner" Panels, all of the same type. Setting all these "inner Panels" to Dock = Top, or whatever is very useful, but they will all be "jammed together" visually: Any Margin.Top or Margin.Top settings of these inner Panels will be ignored. So far, my strategy for creating a better visual experience has been to use UserControls, not "raw" Panels, for the inner things-that-act-like-Panels: Each UserControl has an "inner" Panel inside an "outer" Panel. Both these have Dock set to 'Fill. By setting the background color of the outer Panel to the same color as its outermost Panel, "the host," and then setting the Padding property of the outer Panel in the UserControl to offset the differently colored inner Panel of the UC: Then, when they get all "jammed together" by docking, you can at least simulate a nice visual effect of space between the Docked inner Panels. A logical question for you to be asking right now is: why not just set the UserControl BackColor to the same color as its host container, and have only one Panel in the UC: while I have done this, the simple answer is that I prefer the more fine-grained control possible (I can create fancier visual effects), by having outer/inner Panels in the UC. I wonder if there is a simpler way to approach this ? I guess in an ideal world ... hah ... we could have an over-load of the Dock mechanism, that you would pass a bool into with a name like "respectMarginSettings" :) Should I add some links to "before" and "after" small .jpg screen-shots to this question, to make crystal-clear the visual results I am talking about ? best, Bill
"Everything we call real is made of things that cannot be regarded as real." Niels Bohr
-
Hi, Docking is quite useful in creating UI's, but when you Dock something: the "Margin" property settings of what you Dock are ignored. In the past, I've created several types of UI's where an "outer" Panel's ControlCollection consists solely of identical "inner" Panels, all of the same type. Setting all these "inner Panels" to Dock = Top, or whatever is very useful, but they will all be "jammed together" visually: Any Margin.Top or Margin.Top settings of these inner Panels will be ignored. So far, my strategy for creating a better visual experience has been to use UserControls, not "raw" Panels, for the inner things-that-act-like-Panels: Each UserControl has an "inner" Panel inside an "outer" Panel. Both these have Dock set to 'Fill. By setting the background color of the outer Panel to the same color as its outermost Panel, "the host," and then setting the Padding property of the outer Panel in the UserControl to offset the differently colored inner Panel of the UC: Then, when they get all "jammed together" by docking, you can at least simulate a nice visual effect of space between the Docked inner Panels. A logical question for you to be asking right now is: why not just set the UserControl BackColor to the same color as its host container, and have only one Panel in the UC: while I have done this, the simple answer is that I prefer the more fine-grained control possible (I can create fancier visual effects), by having outer/inner Panels in the UC. I wonder if there is a simpler way to approach this ? I guess in an ideal world ... hah ... we could have an over-load of the Dock mechanism, that you would pass a bool into with a name like "respectMarginSettings" :) Should I add some links to "before" and "after" small .jpg screen-shots to this question, to make crystal-clear the visual results I am talking about ? best, Bill
"Everything we call real is made of things that cannot be regarded as real." Niels Bohr
I find your question confusing, because I can't recall having seen a single Windows Forms control where the Margin settings actually produce any effect. I've always had to reach for Padding instead. But this does lead to just a quick suggestion: try to use padding instead, and let us know if that works.