Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2011, 13:10   #1
Alena-b-v
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 10
По умолчанию Проблема с прорисовкой TextBox

Пишу программку для кроссвордов.
Программа берет из xml документа данные и прорисовывает TextBox в заданном месте.
Xml документ выглядит примерно так:
Код HTML:
<?xml version="1.0" encoding="utf-8" ?>
<Crossword>
	<Size width="7" height="8"/>
	<Words>
          <Word number="1">
      <Question> На Востоке — символ власти и непременный атрибут большого чиновника </Question>
      <Answer>шляпа</Answer>
      <Location x="0" y="0" width="5" horisontal="true"/>
    </Word>
     <Word number="1">
      <Question>   То, о чем мечтает каждый лысый. </Question>
      <Answer>шевелюра</Answer>
      <Location x="0" y="0" width="8" horisontal="false"/>
    </Word>
    <Word number="18">
      <Question>    Река на юге Африки, о которой знают все дети в России </Question>
      <Answer>лимпопо</Answer>
      <Location x="1" y="4" width="6" horisontal="true"/>
    </Word>
  <Word number="3">
      <Question>Отклонение от нормы </Question>
      <Answer>аномалия</Answer>
      <Location x="4" y="2" width="8" horisontal="false"/>
    </Word>
Есть прога:
Код:
using System;
using System.Xml.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Crossword
{
    public partial class Form1 : Form
    {
        private int numberForDrawingOnTextBox;

        List<Word> Words = new List<Word>();

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            XDocument d = XDocument.Load(@"..\..\Crossword.xml");

            int CrossWidth = int.Parse(d.Descendants("Size").First().Attribute(@"width").Value);
            int CrossHeight = int.Parse(d.Descendants("Size").First().Attribute(@"height").Value);

            TextBox[,] matrix = new TextBox[CrossHeight, CrossWidth];

            foreach (XElement elem in d.Descendants("Word"))
            {
                Word w = new Word();
                w.Number = int.Parse(elem.Attribute("number").Value);
                w.Answer = elem.Element("Answer").Value;
                w.Question = elem.Element("Question").Value;
                w.X = int.Parse(elem.Element("Location").Attribute("x").Value);
                w.Y = int.Parse(elem.Element("Location").Attribute("y").Value);
                w.Horisontal = bool.Parse(
                    elem.Element("Location").Attribute("horisontal").Value);
                w.Width = int.Parse(elem.Element("Location").Attribute("width").Value);

                for (int i = 0; i < w.Width; i++)
                {
                    
                    if(w.Horisontal == true)
                    {
                        if (matrix[w.Y, w.X + i] != null)
                        {
                            w.Letters.Add(i, matrix[w.Y, w.X + i]);
                        }
                        else
                        {
                            TextBox tb = new TextBox() { Width = 21, Visible = true };
                            w.Letters.Add(i, tb);
                            matrix[w.Y, w.X + i] = tb;
                        }
                    }
                    else
                    {
                        if (matrix[w.Y + i, w.X] != null)
                        {
                            w.Letters.Add(i, matrix[w.Y + i, w.X]);
                        }
                        else
                        {
                            TextBox tb = new TextBox() { Width = 21, Visible = true };
                            w.Letters.Add(i, tb);
                            matrix[w.Y + i, w.X] = tb;
                        }
                    }
                }

                Words.Add(w);
            }

            for(int i = 0; i < CrossHeight; i++)
            {
                for(int j = 0; j < CrossWidth; j++)
                {
                    if(matrix[i,j] != null)
                    {
                        TextBox tb = matrix[i, j];
                        tb.Location = new Point(j*21,i*21);
                        this.Controls.Add(matrix[i, j]);
                    }
                }
            }

            this.ClientSize = new Size(CrossWidth*21, CrossHeight*21);

        }

        void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawString(numberForDrawingOnTextBox.ToString(),
                new Font(FontFamily.GenericSerif, 2), new SolidBrush(Color.Black), new PointF(3, 3));
        }
}
Но каждый раз при компиляции выдает ошибку в строках if (matrix[w.Y, w.X + i] != null) или if (matrix[w.Y + i, w.X] != null) .
Пишет Индекс находился вне границ массива.
Подскажите пожалуйста в чем проблема.
Alena-b-v вне форума Ответить с цитированием
Старый 31.07.2011, 23:17   #2
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

в том что индекс находится вне границы массива. вы уверены, что добавив i к w.X и w.Y вы не уйдёте за грануцу? на 100%?
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 01.08.2011, 12:30   #3
Alena-b-v
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 10
По умолчанию

Проблема в том что когда считываются первые два слова(по горизонтали и по вертикали) то все прорисовывается корректно а вот остальные слова если они длиннее то прорисовываться они не хотят.

Например: если первое слово по горизонтали 5 букв то следующее слово по горизонтали прорисуеться только если букв 5 или меньше. Если букв в слове 6 и больше - выдается ошибка.
Alena-b-v вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Textbox Garrison Microsoft Office Excel 8 20.02.2016 21:59
Проблема с textbox-ом Оленька______87 Microsoft Office Excel 2 27.05.2010 21:17
Проблема с Combobox и TextBox ARud Microsoft Office Excel 4 08.02.2010 17:54
Проблема с TextBox miatu Microsoft Office Word 3 10.09.2009 18:08
Проблемы с прорисовкой :/ Ilidan Общие вопросы по Java, Java SE, Kotlin 0 16.10.2007 01:46