2014-03-04 34 views
0

我创建了一个类,并希望使用构造RTB(),如何在运行时为新对象分配名称?

public class Rtb 
{ 
    public RichTextBox newRTB; 

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

然后,我在下面的代码是添加一个RichTextBox后,点击菜单使用RTB(),

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(例如,使用backspace键删除box2),如何动态更改名称? (然后box3变成box2,box4变成box3 ...)

回答

1

你可以一个静态属性添加到正在使用的RTB构造发出的唯一名称是被添加每个RichTextBox的你RTB类。 (我不知道为什么你会觉得需要“重命名”他们,如果你没有额外的背景下去除你的问题)

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(); 
    } 
} 
+0

谢谢!尽管这不是我预期的答案,但它确实给了我一个好主意。但有一个问题,NextID始终是奇数,1,3,5,7 ... – user3339999

+0

您是否从两个地方拨打了NextID? (通过电子邮件向我发送您的代码,我可以看出发生了什么。) – Wonderbird

+0

不,只有一个地方。有可能在个人资料中找到你的电子邮件吗? – user3339999

0

RichTextBox有一个Name属性,它可以通过程序设置。要公开它,您可以将此属性添加到您的Rtb类。

public string Name 
{ 
    get { return newRTB.Name; } 
    set { newRTB.Name = value; } 
} 
相关问题