C# can';t获取菜单条上轨迹栏的值

C# can';t获取菜单条上轨迹栏的值,c#,menustrip,trackbar,C#,Menustrip,Trackbar,我已经手动在菜单条中添加了一个轨迹栏,因为VS2008不允许我这样做。 但是,我无法获得trackbar的值 表格1.cs: [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.MenuStrip | ToolStripItemDesignerAvailability.ContextMenuStrip)] public c

我已经手动在菜单条中添加了一个轨迹栏,因为VS2008不允许我这样做。 但是,我无法获得trackbar的值

表格1.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;
         }
     }
表格1.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“GoRunTuileMe2.Form1.TrackBarMenuItem”不包含 “Value”的定义,并且没有接受 类型为“GoRunTuileMe2.Form1.TrackBarMenuItem”的第一个参数可能 被找到(是否缺少using指令或程序集引用?)


有什么想法吗?

你的类
TrackBarMenuItem
是否有一个名为
Value
的属性?如果没有,则必须添加它。

在新的TrackBarMenuItem类中将内部Trackbar对象的值作为属性公开:

Value { get { return trackBar.Value; } set { trackBar.Value = value; } }

我正在添加我找到的解决方案。可能有人需要它:

[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);
            }
        }

    }
[System.ComponentModel.DesignerCategory(“代码”)]
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip | ToolStripItemDesignerAvailability.MenuStrip)]
公共部分类ToolStripMenuItem:ToolStripControlHost
{
公共工具StripMenuItem()
:base(CreateControlInstance())
{
}
/// 
///创建名为TrackBar-handy的强类型属性,以防止到处强制转换。
/// 
公共轨迹栏轨迹栏
{
得到
{
返回控制作为轨迹栏;
}
}
/// 
///创建实际控件,注意这是静态的,因此可以从
///构造器。
///
/// 
/// 
私有静态控件CreateControlInstance()
{
轨迹栏t=新轨迹栏();
t、 AutoSize=false;
t、 高度=16;
t、 最大值=255;
//在此处添加其他初始化代码。
返回t;
}
[默认值(0)]
公共整数值
{
获取{return TrackBar.Value;}
设置{TrackBar.Value=Value;}
}
/// 
///附加到我们要重新包装的事件
/// 
/// 
SubscribeControlEvents上受保护的覆盖无效(控制)
{
基础。订阅控制(控制);
TrackBar TrackBar=作为TrackBar的控件;
trackBar.ValueChanged+=新的事件处理程序(trackBar\u ValueChanged);
}
/// 
///从事件中分离。
/// 
/// 
受保护的覆盖无效OnSubscribeControlEvents(控制)
{
base.OnUnsubscribeControlEvents(控制);
TrackBar TrackBar=作为TrackBar的控件;
trackBar.ValueChanged-=新的事件处理程序(trackBar\u ValueChanged);
}
/// 
///事件路由
///TrackBar.ValueChanged->ToolStripTrackBar.ValueChanged
/// 
/// 
/// 
void trackBar_值已更改(对象发送方,事件参数e)
{
//当轨迹栏值更改时,触发事件。
如果(this.ValueChanged!=null)
{
值已更改(发送方,e);
}
}
//添加可从设计器订阅的事件。
公共事件处理程序值已更改;
//设置其他有趣的默认值
受保护的覆盖大小DefaultSize
{
得到
{
返回新尺寸(200,16);
}
}
}
如果将其添加到代码中,则可以通过设计器将轨迹栏添加为ToolStripMenuItem