Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка событий в C#

2.1K
13 апреля 2007 года
госик
98 / / 20.11.2006
Итак, кроссворд нарисован...
Объектом является клетка - рисуется через Rectangle.
Как теперь установить букву в клетку? Нужно обработать события мыши, курсора, нажатия клавиши или что-то еще? Как вообще? Может есть еще какие-то способы (не затрагивающие обработку событий, не знаю, может через массив...)
Но мне нужно рисовать кроссворд с помощью каких-нибудь TextBoks из ToolBar. (это мне не подходит)
242
14 апреля 2007 года
Оlga
2.2K / / 04.02.2006
обрабатывай событие Click(MouseDown) объекта на котором нарисован кроссворд, а там по координатам разбирайся, где и как надо рисовать букву. конечно если сделать массив объектов, т.е. для каждой клеточки свой объект, тогда задача упрощается тем, что не надо определять по координатам клика, где именно надо рисовать букву. для данной цели и labels и textBox'ы подойдут.
2.1K
14 апреля 2007 года
госик
98 / / 20.11.2006
Цитата: OlgaKr
обрабатывай событие Click(MouseDown) объекта на котором нарисован кроссворд, а там по координатам разбирайся, где и как надо рисовать букву. конечно если сделать массив объектов, т.е. для каждой клеточки свой объект, тогда задача упрощается тем, что не надо определять по координатам клика, где именно надо рисовать букву. для данной цели и labels и textBox'ы подойдут.


Спасибо, Ольга. Сегодня попробую что-нибудь сделать... может что-то получиться.

2.1K
14 апреля 2007 года
госик
98 / / 20.11.2006
Первый вопрос:

Как сделать массив моих клеточек (элементов кроссворда), если эти объекты у меня создаются примерно так:

 
Код:
if (array[i,j]>48 && array[i,j]<58){
Number n = new Number (...);
n.Drawing (...);   //рисуется клетка с цифрой
}
if (array[i,j]=='*'){
Letter l = new Letter (...);
l.Drawing (...); //клетка, в которой потом надо писать букву
}


в array хранится образ кроссворда.
С учетом, что я работаю на 2003 вижале, т.е. например, в 2005 я просто могла бы создать шаблонный List, и вызывать ф-ию Add. А в 2003 как сделать?

И второй вопрос:
Как обработать событие MouseDown and MouseUp таким образом, чтобы в нужной клетке замигал курсор (типа для ввода буквы)? А то обычно все примеры сходятся к отрисовке каких-то линий и подобного. А блин еще привыкла c текстом работать в консоле в С++. Блин взял и написал сout для вывода и cin для ввода.
242
15 апреля 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
С учетом, что я работаю на 2003 вижале, т.е. например, в 2005 я просто могла бы создать шаблонный List, и вызывать ф-ию Add. А в 2003 как сделать?


насколько я поняла твой вопрос - используй ArrayList и его метод Add.

Цитата:
Как обработать событие MouseDown and MouseUp таким образом, чтобы в нужной клетке замигал курсор (типа для ввода буквы)?


Тогда наверно стоит делать кроссворд из TextBox'ов.

2.1K
15 апреля 2007 года
госик
98 / / 20.11.2006
Пробовала. Но может подскажете, как правильно им пользоваться? я делаю так:
public ArrayList knumber = new ArrayList();
public ArrayList kletter = new ArrayList();

потом в условиях добавляю туда элементы.
теперь как их эти ArrayList вывести?

int myFixedSize = (int)ArrayList.FixedSize( kletter );
for (int i = 0; i<myFixedSize; i++)
kletter.Drawing(e, xbaseOffset, ybaseOffset);

ошибка про kletter, такая: 'object' does not contain a definition for 'Drawing'
ну и конвертировать в int не может 'System.Collections.ArrayList'
2.1K
15 апреля 2007 года
госик
98 / / 20.11.2006
теперь делаю так:

for (int i = 0; i<kletter.Count; i++)
(KLetter)kletter.Drawing(e, xbaseOffset, ybaseOffset);

ошибка такая:'object' does not contain a definition for 'Drawing'
242
15 апреля 2007 года
Оlga
2.2K / / 04.02.2006
покажи/скажи элементы каких типов добавляешь, тогда приведу промер.
даи что ты здесь пытаешься сделать?
 
Код:
int myFixedSize = (int)ArrayList.FixedSize( kletter );

kletter - это ссылка на объект ArrayList, а ты приводишь к инт.
есть свойство Length - NameObj.Length - кол-во объектов в контейнере...
я же дала тебе ссылку в предыдущем посте, почитай мсдн, тем более на рус. языке.
242
15 апреля 2007 года
Оlga
2.2K / / 04.02.2006
 
Код:
[SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] s = "";[/SIZE]
[SIZE=2]ArrayList mylist = [/SIZE][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] ArrayList();[/SIZE]
[SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] i = 0; i < 10; i++)[/SIZE]
[SIZE=2]mylist.Add([/SIZE][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] ClassExample(i));[/SIZE]
[SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2](ClassExample obj [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] mylist)[/SIZE]
[SIZE=2]s += obj.Name + '\n';[/SIZE]
[SIZE=2]s = "";[/SIZE]
[SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] i = 0; i < mylist.Count; i++)[/SIZE]
[SIZE=2]s+= ((ClassExample)mylist).ToString();[/SIZE]


Код:
[SIZE=2][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][SIZE=2] ClassExample[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff]private [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] age;[/SIZE]
[SIZE=2][COLOR=#0000ff]private [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] name;[/SIZE]
[SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][SIZE=2] ClassExample([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] i)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff] this[/COLOR][/SIZE][SIZE=2].age = i;[/SIZE]
[SIZE=2][COLOR=#0000ff] this[/COLOR][/SIZE][SIZE=2].name = "No name" + i;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] Name[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff] get[/COLOR][/SIZE][SIZE=2]{ [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] name; }[/SIZE]
[SIZE=2][COLOR=#0000ff] set[/COLOR][/SIZE][SIZE=2]{ name=[/SIZE][SIZE=2][COLOR=#0000ff]value[/COLOR][/SIZE][SIZE=2]; }[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] Age[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff] get[/COLOR][/SIZE][SIZE=2]{ [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] age; }[/SIZE]
[SIZE=2][COLOR=#0000ff] set[/COLOR][/SIZE][SIZE=2]{ age=[/SIZE][SIZE=2][COLOR=#0000ff]value[/COLOR][/SIZE][SIZE=2]; }[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]override [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] ToString()[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff] return [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][SIZE=2].name+' '+[/SIZE][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][SIZE=2].age+'\n';[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]}[/SIZE][/SIZE]


for (int i = 0; i<kletter.Count; i++)
[COLOR=red]([/COLOR](KLetter)kletter[COLOR=red])[/COLOR].Drawing(e, xbaseOffset, ybaseOffset);
2.1K
15 апреля 2007 года
госик
98 / / 20.11.2006
Да кстати огромное спасибо за русскую МSDN. А то я всегда пыталась что-то найти на английском.
Так про скобочки поняла, только теперь ничего не рисуется. Привожу пример, не судите строго :) впервые программирую на Сишарп и в визуале :) да и программист я плохой :)
Код:
public class KNumber : System.Windows.Forms.Form
{
        int number;
    int height, wight;
    Color clr;
    Pen pen;
    public KNumber (int height, int wight, Color clr, Pen pen)
    {
        this.height = height; this.wight = wight;
        this.clr = clr;
        this.pen =  new Pen(clr, 0.5f);
    }
    public void Drawing(PaintEventArgs e, int xOffset, int yOffset, char num)
    {
        Graphics g = e.Graphics;
        Color color = Color.Green;
        Brush brush = new SolidBrush(color);
        Pen pen = new Pen(this.clr, 3f);
        g.FillRectangle(Brushes.Yellow, xOffset, yOffset, height, wight);
        g.DrawRectangle(pen, xOffset, yOffset, height, wight);
        g.DrawString((num).ToString(), new Font(Font, FontStyle.Bold), brush, xOffset + 10, yOffset + 10);
        }
public class KLetter : System.Windows.Forms.Form
{
    int height, wight;
    Color clr;
    Pen pen;
    public KLetter (int height, int wight, Color clr, Pen pen)
    {
        this.height = height;
        this.wight = wight;
        this.clr = clr;
        this.pen =  new Pen(clr, 0.25f);
    }
    public void Drawing(PaintEventArgs e, int xOffset, int yOffset)
    {
        Graphics g = e.Graphics;
        Pen pen = new Pen(Color.Red, 0.5f);
        Pen line = new Pen(Color.Black, 10f);
        g.FillRectangle(Brushes.White, xOffset + 1, yOffset + 1, height, wight);
        g.DrawRectangle(pen, xOffset + 1, yOffset + 1, height, wight);
    }


А в главном классе Form1 (который создается автоматически):
Код:
protected override void OnPaint(PaintEventArgs e)
{
    Pen fornumber = new Pen(Color.Blue, 0.5f);
    Pen penColor = new Pen(Color.Red, 0.5f);
    Pen penEmpty = new Pen(Color.White);
    int xbaseOffset = 20, ybaseOffset = 20;
    char num;
    for (int i = 0; i<n1; i++)
    {
        for (int j = 0; j<n2; j++)
        {
            if (j != (n2 - 1))
            {
                if (array[i,j]==' ')
                {
                    xbaseOffset += 40;
                }
                if (array[i,j]=='*')
                {
                    KLetter kl = new KLetter(40, 40, Color.Red, penColor);
        //          kl.Drawing(e, xbaseOffset, ybaseOffset);
                    kletter.Add(kl);
                    xbaseOffset += 40;
                }
                if (array[i,j]>48 && array[i,j]<58)
                {
                    num = array[i,j];
                    KNumber kn = new KNumber(40, 40, Color.Blue, fornumber);
                    knumber.Add(kn);
        //          kn.Drawing(e, xbaseOffset, ybaseOffset, num);
                    xbaseOffset += 40;                         
                }
            }
            if (j == (n2 - 1))
            {
                ybaseOffset += 40;
                xbaseOffset = 20;
            }
        }
    }
    base.OnPaint (e);
}

public void print (PaintEventArgs e, ArrayList kletter, ArrayList knumber, int xbaseOffset, int ybaseOffset, char num)
{
    for (int i = 0; i<kletter.Count; i++)
        ((KLetter)kletter).Drawing(e, xbaseOffset, ybaseOffset);
    for (int j = 0; j<knumber.Count; j++)
        ((KNumber)knumber[j]).Drawing(e, xbaseOffset, ybaseOffset, num);
}

Названия функций придется переделывать потом, наверное.
2.1K
15 апреля 2007 года
госик
98 / / 20.11.2006
А все... вроде бы получилось. Все рисуется.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог