BUG in Combobox.Location ?

G

Guest

Hi,

I want to draw combobox to bottom of form. I have following code :

ComboBox C = new ComboBox();
C.Font=FontNormal;
Size CSize=C.Size;
C.Location = new Point(0,this.Height - CSize.Height); // this.Height is
Height of parent control
this.Controls.Add(C);

By me it is correct but down part of my combobox is drawn out of control.
Why ?

Thank you
 
T

Tim Wilson

I am assuming that the parent is a Form. Try using the ClientRectangle
property instead.
C.Location = new Point(0, this.ClientRectangle.Height - CSize.Height);

In addition, if you want the ComboBox fixed to the bottom left corner of the
parent then consider using the following line.
C.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
 
G

Guest

Hi,

It does not help me. But ... now I debugging my code and I wonder even if I
set to Combobox.Font font of size 1 or 100 I get still same Height of
Combobox.Size !
It is a bad isn't ??? When I change font of combobox also size of combobox
will change so why it is not reflected by Combobox.Size ???

B.J.
 
T

Tim Wilson

Changing to use the ClientRectangle property didn't resolve your issue? What
type of control is the parent in this situation? When setting the Font to a
larger size it should increase the size of the ComboBox and this should be
shown through the Size property. Can you post all the code that you are
using so that we can better understand where you might be going wrong?
 
G

Guest

Hi,

I do web browser control (it will host in Internet Explorer - on
client-side). I simplified code and here it is (and also changing font size
for control has no effect on Combobox.Size) :

namespace T {
public class BrowserControl : System.Windows.Forms.Control {

const int FontSizeNormal=28;
const String FontFamilyNormal="Arial";

protected override void OnHandleCreated(EventArgs EA) {
Font FontNormal = new Font(FontFamilyNormal,FontSizeNormal);

ComboBox C = new ComboBox();
C.Font=FontNormal;
Size CSize=C.Size;
C.Location = new Point(0,this.Height - CSize.Height);
this.Controls.Add(C);

}
}
}

And in HTML page it is in <OBJECT HEIGHT="100" WIDTH="100" CLASSID="..."
....></OBJECT>

I use .NET version 1.1 on Windows Server 2003 EE, IE 6

Hope you will find where is problem ...
 
T

Tim Wilson

So what is the overall goal of the control? Have you tried creating a
UserControl, instead of inheriting from Control, and using the designer to
create your control? This can be done by creating a "Windows Control
Library" project. Below, I have created a UserControl that contains a
ComboBox that is fixed to the bottom-left corner. I have tested this control
in a Windows Forms application as well as embedded in a web page and it
works as expected. I am using Windows 2000 Pro, VS.Net 2003 w/ .Net Fx 1.1
SP1, IE 6.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace WindowsControlLibrary1
{
public class UserControl1 : System.Windows.Forms.UserControl
{
private System.Windows.Forms.ComboBox comboBox1;
public UserControl1()
{
InitializeComponent();
this.comboBox1.Location = new Point(0, (this.Height -
this.comboBox1.Size.Height));
this.comboBox1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.Font = new System.Drawing.Font("Arial", 27.75F,
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,
((System.Byte)(0)));
this.comboBox1.Location = new System.Drawing.Point(8, 8);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(72, 50);
this.comboBox1.TabIndex = 0;
//
// UserControl1
//
this.Controls.Add(this.comboBox1);
this.Name = "UserControl1";
this.Size = new System.Drawing.Size(100, 100);
this.ResumeLayout(false);
}
#endregion
}
}
 
G

Guest

I could use it so, but still can't understand why it does not work for
control ...

Thank you for your comments.
 
T

Tim Wilson

So did the UserControl work as expected? It should work for Control if you
really wanted it to. Try deriving the UserControl1 class, that I posted,
from System.Windows.Forms.Control and see if it works. So change this line
(public class UserControl1 : System.Windows.Forms.UserControl) to be this
line (public class UserControl1 : System.Windows.Forms.Control).
 
G

Guest

When I comment
this.comboBox1.Size = new System.Drawing.Size(72, 50);
it does not work neither for : UserControl.
 
T

Tim Wilson

This probably has to do with the ComboBox getting set to a default size at
some point in it's creation process. So you can either explicitly set a Size
or you can move the code that is used to set the Location into an OnResize
override for the UserControl. So add this method to the UserControl1 class.

protected override void OnResize ( System.EventArgs e )
{
this.comboBox1.Location = new Point(0, (this.Height -
this.comboBox1.Size.Height));
base.OnResize(e);
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top