2014-02-11 3 views
-1

int counter; CheckBox [] _cbs;Как добавить checkbox рядом с каждой строкой?

ScrollLabel._lines содержит 151l ines. counter is int

Я хочу, чтобы в строке 0, а затем каждые 3 строки добавили флажок в начале строки с одним пространством вправо, чтобы между текстом в строке и CheckBox.

Теперь им получать исключение в петлю на линии:

private void button1_Click(object sender, EventArgs e) 
     { 
      if (this.button1.Text == "stop") 
      { 
       this.button1.Text = "start"; 
       this.scrollLabel1.StopTimer(); 
       for (int i = 0; i < ScrollLabel._lines.Length; i++) 
       { 
        counter += 3; 
        _cbs[i] = new CheckBox(); 
        _cbs[i].Location = new Point(0, counter); 
        this.scrollLabel1.Controls.Add(_cbs[i]); 

       } 
      } 
      else 
      { 
       this.button1.Text = "stop"; 
       this.scrollLabel1.MilliSecsSpeed = (int)this.numericUpDown1.Value; 
       this.scrollLabel1.StartTimer(); 
      } 
     } 

_cbs[i] = new CheckBox(); 

_cbs равна нулю.

Это конструктор:

counter = 0; 
      this.scrollLabel1.MouseWheel += new MouseEventHandler(ScrollLabel1_MouseWheel); 
      this.scrollLabel1.MouseEnter += ScrollLabel1_MouseEnter; 
      readableRss = RssReader.covertRss("http://rotter.net/rss/rotternews.xml"); 
      RssReader.CnnRss(); 
      this.DoubleBuffered = true; 
      this.scrollLabel1.Text = readableRss;//File.ReadAllText(@"Demo.txt"); 
      this.scrollLabel1.MilliSecsSpeed = (int)this.numericUpDown1.Value; 
      this.scrollLabel1.YStep = (float)this.numericUpDown2.Value; 
      this.scrollLabel1.Words = new List<WordColor>(); 
      this.scrollLabel1.Words.Add(new WordColor() { WordOrText = "scrollLabel1", ForeColor = Color.Red, ColorOnlyThisWord = true, BackColor = Color.LightBlue }); 
      this.scrollLabel1.Words.Add(new WordColor() { WordOrText = "using", ForeColor = Color.Blue, DrawRect = true, RectColor = Color.Black, BackColor = Color.Wheat }); 


      this.scrollLabel1.PopLinesOnNonBmpMode = this.checkBox6.Checked; 

      this.scrollLabel1.BitmapModus = this.checkBox4.Checked; 
      this.scrollLabel1.TextLayoutCentered = this.checkBox5.Checked; 
      this.scrollLabel1.AdditionalLinesAtEnd = (int)this.numericUpDown3.Value; 

      for (int i = 0; i < ScrollLabel._lines.Length; i++) 
      { 
       _cbs = new CheckBox[i]; 
      } 

Это, как петля на кнопку мыши выглядеть как сейчас:

for (int i = 0; i < ScrollLabel._lines.Length; i++) 
       { 
        counter += 3; 
        _cbs[i].Location = new Point(0, counter); 
        this.scrollLabel1.Controls.Add(_cbs[i]); 

       } 

Но все _cbs равны нулю внутри.

EDIT **

for (int i = 0; i < ScrollLabel._lines.Length; i++) 
       { 
        _cbs[i] = new CheckBox(); 
        counter += 3; 
        _cbs[i].Location = new Point(0, counter); 
        this.scrollLabel1.Controls.Add(_cbs[i]); 

       } 

Не получаю нулевой, но я не вижу CheckBox возле/в начале каждого 3-х линий почему?

+0

Где вы инициализируете 'CheckBox [] _cbs'? –

+0

Тим я добавил теперь к моему вопросу код конструктора, в конце я добавил цикл, который инициализирует флажки. Но я вижу только 150 флажков и _lines есть 151. – user3200169

+0

Обновлен мой вопрос после инициализации флажков в конструкторе im, который получает null в коде цикла щелчка кнопки на _cbs [i] .Location = new Point (0, counter); я вижу внутри _cbs 150 индексов, все они равны нулю. – user3200169

ответ

3

_cbs является массив, который вы объявили и вы перераспределении в конструкторе:

for (int i = 0; i < ScrollLabel._lines.Length; i++) 
     { 
      _cbs = new CheckBox[i]; // This line reallocates the array as a larger array each time through the loop! 
     } 

Вам нужно определить массив только один раз:

CheckBox[] _cbs = new CheckBox[ScrollLabel._lines.Length]; 

Тогда вы выделить отдельные флажки элементам массива:

for (int i = 0; i < ScrollLabel._lines.Length; i++) { 
    _cbs[i] = new CheckBox(); // This allocates a new checkbox for the i-th element 
} 

Чтобы поместить флажок на каждой третьей строке, попробовать что-то вроде этого:

int lineHeight = 20;     // pixels, set this to whatever your line height is 
int checkboxInterval = lineHeight * 3; // every third line 
int numCheckboxes = ScrollLabel._lines.Length/3; 
for (int i = 0; i < numCheckboxes; i++) { 
    _cbs[i] = new CheckBox(); 
    _cbs[i].Location = new Point(0, i * checkboxInterval); 
    this.scrollLabel1.Controls.Add(_cbs[i]); 
} 

Обратите внимание, что вам нужно всего лишь одну треть так много флажков, как количество строк.

+0

Работа. Но почему я не вижу каждый checkBox около трех строк справа в начале? Если у меня есть 151 строка, я хочу, чтобы каждая 3 строки добавляли контрольный элемент checkbox справа в начале строки. Итак, строка 3 в начале линии checkBox 6 линии 9 строки 12 и т. Д. Но это доцентная работа, я вижу только одну checkBox и ее беспорядочную. – user3200169

+0

Обновлен мой вопрос еще раз в прошлый раз. Сожалею. – user3200169

+0

Checkbox.Location указывает положение флажка относительно его контейнера (см. [Документация] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.location (v = vs. 110) .aspx)).Вы хотите установить флажок на каждой третьей строке, поэтому вам нужно определить размер вашей линии и умножить на три (каждую третью строку). –

Смежные вопросы