не могу получить значение трекбара в полосе меню - PullRequest
1 голос
/ 26 октября 2011

Я добавил трекбар в полоску меню вручную, потому что vs 2008 не позволяет мне делать.Однако, я не могу получить значение trackbar.

Form1.cs:

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.MenuStrip |
                                        ToolStripItemDesignerAvailability.ContextMenuStrip)]
     public class TrackBarMenuItem : ToolStripControlHost
     {
         private TrackBar trackBar;

         public TrackBarMenuItem()
             : base(new TrackBar())
         {
             this.trackBar = this.Control as TrackBar;
             trackBar.TickFrequency = 1;
             trackBar.Maximum = 255;
             trackBar.LargeChange = 5;
             trackBar.SmallChange = 2;
         }
     }

Form1.Designer.cs:

private TrackBarMenuItem trackBar1;
// 
// trackBar1
// 
this.trackBar1.Name = "trackBar1";
this.trackBar1.Size = new System.Drawing.Size(104, 25);

, и вот какмне нужно его использовать:

         private void trackBar1_Scroll(object sender, System.EventArgs e)
     {
         int valueB = trackBar1.Value;
         pictureBox2.Image = Deneme(new Bitmap(pictureBox1.Image),valueB);

     }

но я получаю эту ошибку:

Ошибка 1 «goruntuIsleme2.Form1.TrackBarMenuItem» не содержит определения «Значение» и нетможет быть найден метод расширения 'Value', принимающий первый аргумент типа 'goruntuIsleme2.Form1.TrackBarMenuItem' (отсутствует директива using или ссылка на сборку?)

есть идеи?

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Предоставьте значение внутреннего объекта Trackbar в качестве свойства вашего нового класса TrackBarMenuItem:

Value { get { return trackBar.Value; } set { trackBar.Value = value; } }
1 голос
/ 05 августа 2013

Я добавляю решение, которое нашел. кому-то это может понадобиться:

[System.ComponentModel.DesignerCategory("code")]
    [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip | ToolStripItemDesignerAvailability.MenuStrip)]
    public partial class ToolStripMenuItem : ToolStripControlHost
    {
        public ToolStripMenuItem()
            : base(CreateControlInstance())
        {

        }

        /// <summary>
        /// Create a strongly typed property called TrackBar - handy to prevent casting everywhere.
        /// </summary>
        public TrackBar TrackBar
        {
            get
            {
                return Control as TrackBar;
            }
        }

        /// <summary>
        /// Create the actual control, note this is static so it can be called from the
        /// constructor.
        ///
        /// </summary>
        /// <returns></returns>
        private static Control CreateControlInstance()
        {
            TrackBar t = new TrackBar();
            t.AutoSize = false;
            t.Height = 16;
            t.Maximum = 255;

            // Add other initialization code here.
            return t;
        }

        [DefaultValue(0)]
        public int Value
        {
            get { return TrackBar.Value; }
            set { TrackBar.Value = value; }
        }


        /// <summary>
        /// Attach to events we want to re-wrap
        /// </summary>
        /// <param name="control"></param>
        protected override void OnSubscribeControlEvents(Control control)
        {
            base.OnSubscribeControlEvents(control);
            TrackBar trackBar = control as TrackBar;
            trackBar.ValueChanged += new EventHandler(trackBar_ValueChanged);
        }

        /// <summary>
        /// Detach from events.
        /// </summary>
        /// <param name="control"></param>
        protected override void OnUnsubscribeControlEvents(Control control)
        {
            base.OnUnsubscribeControlEvents(control);
            TrackBar trackBar = control as TrackBar;
            trackBar.ValueChanged -= new EventHandler(trackBar_ValueChanged);

        }


        /// <summary>
        /// Routing for event
        /// TrackBar.ValueChanged -> ToolStripTrackBar.ValueChanged
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void trackBar_ValueChanged(object sender, EventArgs e)
        {
            // when the trackbar value changes, fire an event.
            if (this.ValueChanged != null)
            {
                ValueChanged(sender, e);
            }
        }

        // add an event that is subscribable from the designer.
        public event EventHandler ValueChanged;


        // set other defaults that are interesting
        protected override Size DefaultSize
        {
            get
            {
                return new Size(200, 16);
            }
        }

    }

если вы добавите это в свой код, вы сможете добавить трекбары как ToolStripMenuItem через Designer.

0 голосов
/ 26 октября 2011

Есть ли у вашего класса TrackBarMenuItem свойство с именем Value? Если нет, вы должны добавить его.

...