我正在以这种方式向主控件添加新控件:
Controls.Add(new ComboBox()
{
Text = "dsnfsdbfsdbfjsdbfsdjbfsmdfbsdbfsbf",
Anchor = AnchorStyles.Left | AnchorStyles.Right,
Width = DropDownWidth(/*Here should be smth. similar to "this" but for currently created combobox*/)
});
public int DropDownWidth(ComboBox myCombo)
{
int maxWidth = 0, temp = 0;
foreach (var obj in myCombo.Items)
{
temp = TextRenderer.MeasureText(obj.ToString(), myCombo.Font).Width;
if (temp > maxWidth)
{
maxWidth = temp;
}
}
return maxWidth;
}
我想将新的Combobox传递给函数并获得所需的宽度。
是否有一些类似于this
的关键字,但是对于我可以传递给函数的新创建的ComboBox?
请没有变通办法!我知道我可以先创建Combobox,填充属性并在下一步添加控件。 现在只有简短形式才有意思。
谢谢!
答案 0 :(得分:2)
没有。在实际创建对象之前,不能使用该对象的引用,从技术上讲,它不在对象初始化器中,因为它是创建语句的一部分。在这种情况下,“解决方法”是必需。
像...一样的东西。
var myTextArray = new[] { "Hi", "ho", "Christmas" }
Controls.Add(new ComboBox()
{
Text = "dsnfsdbfsdbfjsdbfsdjbfsmdfbsdbfsbf",
Anchor = AnchorStyles.Left | AnchorStyles.Right,
Width = DropDownWidth(myTextArray, this.Font)
});
...其中this
当然是您的Form
或其他家长Control
。
修改后的DropDownWidth
方法会读取类似......
public int DropDownWidth(object[] objects, Font font)
{
int maxWidth = 0, temp = 0;
foreach (var obj in objects)
{
temp = TextRenderer.MeasureText(obj.ToString(), font).Width;
if (temp > maxWidth)
{
maxWidth = temp;
}
}
return maxWidth;
}
答案 1 :(得分:1)
您无法将其传递给该函数,因为它尚不存在
例如@ J.Steen:
public class CustomCombo : System.Windows.Forms.ComboBox
{
private int _width;
public int Width
{
get { return _width; }
set { _width = value; }
}
public CustomCombo()
{
_width = getWidth(this);
}
public int getWidth(System.Windows.Forms.ComboBox combo)
{
//do stuff
return 0;
}
}