Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к контролу из другого класса 
V
    Опции темы
ura1234
  Дата 29.6.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.5.2009

Репутация: нет
Всего: нет



Не могу добиться изменение состояния контекстного меню, мне надо чтобы  при щелчке правой кнопки мышки на форме открывалось контекстное меню с погашенной кнопкой "Свойства", а при щелчке на объекте pictureBox с включенной. Сделал обработчик события мыши в форме работает, а вот включить его из класс MyPictureBox не получается.
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace tmp
{
    delegate void SimpleDelegate2();
    public partial class Form1 : Form
    {
        public static MyPictureBox[] pbarray;
        public static int positionarray;
        public Form1()
        {
            pbarray = new MyPictureBox[200];
            InitializeComponent();
        }

        private void PicAdd_Click(object sender, EventArgs e)
        {
            pbarray[1] = new MyPictureBox();
            pbarray[1].Parent = panel1;
            pbarray[1].posit = positionarray;
            pbarray[1].ContextMenuStrip = contextMenuStr;
            pbarray[1].MyPicBox();
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.ContextMenuStrip = contextMenuStr;
            Property.Enabled = toolStripMenuCopy.Enabled = false;
        }
    }
}


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace tmp
{

    public class MyPictureBox : PictureBox
    {
        public string txt;
        public int Layer;
        public int ID;
        public int posit = 0;
        public string name;
        public void MyPicBox()
        {

            ID = 0;
            name = "PictureBox";
            ImageLocation = "";
            Size = new Size(100, 200);
            Location = new Point(200, 200);
            BackColor = Color.FromArgb(50, 50, 50);
            MouseDown += pictureBox_MouseDown;
            MouseMove += pictureBox_MouseMove;
            MouseUp += pictureBox_MouseUp;
            Paint += dd;


        }

        public void MakeMyPicBox()
        {
            if (Globals.access == true)
            {
                MouseDown += pictureBox_MouseDown;
                MouseMove += pictureBox_MouseMove;
                MouseUp += pictureBox_MouseUp;
            }
            Paint += dd;
            Invalidate();
        }

        public void dd(object sender, PaintEventArgs e)
        {
            Graphics dc = CreateGraphics();
            Brush blackBrush = Brushes.Black;
            Brush blueBrush = Brushes.Blue;
            //   Font haettenschweilerFont = new Font("haettenschweilerFont", 8);
            Font boldTimesFont = new Font("Times New Roman", 10, FontStyle.Bold);
            //   Font italicCorierFont = new Font("", 11, FontStyle.Italic | FontStyle.Underline);
            //  dc.DrawString("Предлжение из этих букв " + string.Format("{0}", posit) + " ", haettenschweilerFont, blackBrush, 10, 10);
            dc.DrawString("Posit " + posit + "ID =" + ID + " Tag " + Tag + "Text" + txt, boldTimesFont, blueBrush, new Rectangle(new Point(10, 40), new Size(100, 40)));
            //  dc.DrawString("Предлжение из этих букв", italicCorierFont, blackBrush, new Point(10, 100));
        }

        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            Property.Enabled = toolStripMenuCopy.Enabled = true;// Ругается
        }


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  tmp.rar 45,58 Kb
PM MAIL   Вверх
KelTron
Дата 29.6.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Потому что MyPictureBox ничего не знает об элементах контекстного меню.
Лучше отслеживать нажатие кнопки по контролу MyPictureBox, тогда не будет с этим проблем:
Код

namespace tmp
{
    delegate void SimpleDelegate2();
    public partial class Form1 : Form
    {
        public static MyPictureBox[] pbarray;
        public static int positionarray;
        public Form1()
        {
            pbarray = new MyPictureBox[200];
            InitializeComponent();
        }

        private void PicAdd_Click(object sender, EventArgs e)
        {
            pbarray[1] = new MyPictureBox();
            pbarray[1].Parent = panel1;
            pbarray[1].posit = positionarray;
            pbarray[1].ContextMenuStrip = contextMenuStr;
            pbarray[1].MouseDown += pb_MouseDown; // вот тут добавим код
            pbarray[1].MyPicBox();
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.ContextMenuStrip = contextMenuStr;
            Property.Enabled = toolStripMenuCopy.Enabled = false;
        }
        
        // И вот тут
        private void pb_MouseDown(object sender, MouseEventArgs e)
        {
            Property.Enabled = toolStripMenuCopy.Enabled = true;
        }
    }
}



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
ura1234
Дата 30.6.2009, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.5.2009

Репутация: нет
Всего: нет



Огромное Спасибо! Всё работает. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.