winform的三级联动? 以前用控件做过一个,但我记得到最后有个地方被卡住了

解决方案 »

  1.   


    两种情况,一种是同一个控件 control1 修改a属性时,b属性变为隐藏或不可修改;一种是2个控件,修改control1的a属性时,control2的属性b同时发生变化。
      

  2.   

    能帮忙写个code示例不?多谢:)
      

  3.   

    SharpDevleop源代码,看人家是怎么实现的
      

  4.   

    比如自定义一个用户控件
    这个控件中包括两个testbox公开的属性为
    ShowTestBox1
    ShowTestBox2然后再这个属性的SET里面写控制就可以了
    当ShowTestBox1为true时
    更改ShowTestBox2为false
    并且把testbox1的visible设为true,testbox2的visible为false
      

  5.   

    lovefootball(蟑螂(生活就是扯淡--做人要放低姿态)) 
    不是两个控件,而是两个属性的联动。
      

  6.   

    楼主的要求我看是行不通的,在设计时如何去禁用一个属性呀?没听说过还可以这样的!>>>可以,我就做過,不過需要繼承控件自己寫一個類.
      

  7.   

    GeDeL(. ) The Lives Of Others ( .) How?
      

  8.   

    以前做過一個ListView,需要改變A屬性的時候,B屬性會按照A屬性的取值變為可用與不可用,應該和LZ的要求差不多吧?不過現在在公司,沒有源代碼,霎時我也想不起具體的實現方法了,呵呵... -_-!晚上我把代碼發給你好嗎?
      

  9.   

    其實方法就是 lovefootball(蟑螂(生活就是扯淡--做人要放低姿态)) 說的那樣.
      

  10.   

    GeDeL(. ) The Lives Of Others ( .)
    好,非常感谢:)
      

  11.   

    一個繼承自ListView的控件,增加了一個ColumnStyle的屬性,因為ListView的列是不能隱藏的,
    而且列寬可以隨意拖動改變,我就寫了一個控件,增加了隱藏任何列與可以設定列寬度不能改變這些特性,加上一個ColumnStyle的屬性,當ColumnStyle=Fixed,MinWidth/MaxWidth屬性變為不可用,當ColumnStyle=Sizeable,MinWidth/MaxWidth屬性變為可用:[ReadOnly(false)]
    public String XXX
    {
    get{};
    set{};
    }[ReadOnly(false)]
    [System.ComponentModel.RefreshPropertiesAttribute(System.ComponentModel.RefreshProperties.All)]public HeaderStyle ColumnStyle
    {
    get
    {
    switch(m_columnStyle)
    {
    case colStyle.Fixed:
    SetPropertyReadOnly(this, "MinWidth", true); <- 將"MinWidth"屬性變為不可修改 SetPropertyReadOnly(this, "MaxWidth", true); <- 將"MaxWidth"屬性變為不可修改
    break;
    case colStyle.Sizeable:
    SetPropertyReadOnly(this, "MinWidth", false); <- 將"MinWidth"屬性變為可修改 SetPropertyReadOnly(this, "MaxWidth", false); <- 將"MaxWidth"屬性變為可修改
    break;
    ...
    ...
    default:
    break;
    }
    }
    set
    {
    ...
    ...
    }
    }//這個就是重點了
    void SetPropertyReadOnly(object obj, string propertyName, bool readOnly)
    {
    Type type = typeof(System.ComponentModel.ReadOnlyAttribute);
    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
    AttributeCollection attrs = props[propertyName].Attributes;
    FieldInfo fld = type.GetField("isReadOnly", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance);
    fld.SetValue(attrs[type], readOnly);
    }切記一點,其他自定義的屬性,一定要加上[ReadOnly=false],否則當你調用上面這個函數的時候,所有屬性都會變成ReadOnly=true,影響使用!上面的東西都是從CSDN學來的,咔咔...具體出處是哪個帖子忘了...
      

  12.   

    一定要加上[ReadOnly=false]...>>>筆誤,應該是: [ReadOnly(false)]
      

  13.   

    搞定,多谢GeDeL(. ) The Lives Of Others ( .)
    另一个不同控件之间关联的问题以后再开帖问呵呵,结贴。