如何在运行时为新对象分配名称?

时间:2014-03-04 20:11:31

标签: c# wpf

我创建了一个类,并且想要使用构造函数Rtb(),

public class Rtb
{
    public RichTextBox newRTB;

    public Rtb()
    {
        newRTB = new RichTextBox();
        newRTB.IsReadOnly = true;
        newRTB.MouseDoubleClick += new MouseButtonEventHandler(newRTB_MouseDoubleClick);
    }
...  ...

然后我在下面的代码中使用Rtb(),点击菜单后添加一个richtextbox,

List<Rtb> rtba = new List<Rtb>();

private void menuBox_Click(object sender, RoutedEventArgs e)
    {
        BlockUIContainer newBlockUC = new BlockUIContainer();
        newBlockUC.Margin = new Thickness(50, 10, 50,10);
        mainWin.Document.Blocks.Add(newBlockUC); // add to mainWin, which is a big    richtextbox
        rtba.Add(new Rtb()); // add to list
        Rtb newRichTB = new Rtb();                
        newBlockUC.Child = newRichTB.newRTB; //add to newBlockUC

    }

我的问题是,如何为每个新创建的richtextbox分配(序列化)名称? (例如,box1,box2,box3 ......)

如果用户在运行时手动删除一个richtextbox(例如,使用退格键删除box2),如何动态更改名称? (然后box3变为box2,box4变为box3 ......)

2 个答案:

答案 0 :(得分:1)

您可以向Rtb类添加一个静态属性,Rtb构造函数使用该属性为添加的每个RichTextBox发出一个唯一的名称。 (我不确定为什么你会觉得有必要“重新命名”他们如果你的问题被移除而没有额外的背景。)

public class Rtb
{
    private static int _NextID = -1;
    public static int NextID
    {
        get
        {
            _NextID++;
            return _NextID;
        }
    }        
    public RichTextBox newRTB;

    public Rtb()
    {
        newRTB = new RichTextBox();
        newRTB.IsReadOnly = true;
        newRTB.MouseDoubleClick += new MouseButtonEventHandler(newRTB_MouseDoubleClick);
        newRTB.Name = "Box" + NextID.ToString();
    }
}

答案 1 :(得分:0)

RichTextBox具有Name属性,可以通过编程方式设置。要公开它,您可以将此属性添加到Rtb类。

public string Name
{
    get { return newRTB.Name; }
    set { newRTB.Name = value; }
}