AMcoder - javascript, python, java, html, php, sql

Մերժել Splitter-ի օգտագործումը PropertyGrid Control-ում

Արդյո՞ք որևէ միջոց կա մերժելու օգտվողին օգտագործել Splitter-ը PropertyGrid Control-ում: Ես անցնում եմ PropertyGrid Control-ի բոլոր հատկությունները, բայց չեմ գտել այն անջատել: Մի բան է, որ ես բացակայում եմ: Ամեն դեպքում կա՞ դա ծրագրային կերպով դա անել: Ես օգտագործում եմ C# Winforms VS2010:

Շնորհակալություն


  • Ես ի սկզբանե տեղադրել էի սրա պատասխանը, բայց դա վերաբերում էր միայն երրորդ կողմի գրադարանին: Թվում է, թե դեռ հնարավոր է անել այն, ինչ ցանկանում եք անել, բայց դուք ստիպված կլինեք անդրադառնալ որոշ մասնավոր հատկությունների և ջութակ անել Win32 հաղորդագրությունների հետ, որպեսզի դա անեք, կարծում եմ, այնքան էլ գեղեցիկ չէ: 23.09.2015

Պատասխանները:


1

Դիտելով PropertyGrid կառավարման աղբյուրի կոդը՝ MSDN PropertyGrid

Հորիզոնական բաժանարարի վարքագիծը կանխելու համար վերացրեք OnMouseDown և OnMouseMove մեթոդները: Ուղղահայաց բաժանարարի վարքագիծը կանխելու համար մոտեցումներից մեկն է օգտագործել IMessageFilter և սպառել մկնիկի իրադարձությունները, երբ մկնիկի գտնվելու վայրը գտնվում է բաժանարարի գտնվելու վայրի մոտ:

public class MyForm3 : Form, IMessageFilter {

    PropertyGrid pg = new MyPropertyGrid { Dock = DockStyle.Fill };
    Control gridView = null;
    MethodInfo miSplittlerInside = null;

    public MyForm3() {
        Controls.Add(pg);
        pg.SelectedObject = new Button { Text = "Bob" };

        var f = typeof(PropertyGrid).GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic);
        gridView = (Control) f.GetValue(pg);
        miSplittlerInside = gridView.GetType().GetMethod("SplitterInside", BindingFlags.Instance | BindingFlags.NonPublic);

        Application.AddMessageFilter(this);
    }

    private const int WM_MOUSEMOVE = 0x200;
    private const int WM_LBUTTONDOWN = 0x201;
    private const int WM_LBUTTONDBLCLK = 0x203;

    public bool PreFilterMessage(ref Message m) {
        if (m.HWnd == gridView.Handle) {
            if (m.Msg == WM_MOUSEMOVE || m.Msg == WM_LBUTTONDOWN || m.Msg == WM_LBUTTONDBLCLK) {
                Point pt = new Point(m.LParam.ToInt32());
                bool inside = (bool) miSplittlerInside.Invoke(gridView, new Object[] { pt.X, pt.Y });
                if (inside) {
                    return true;
                }
            }
        }
        return false;
    }

    class MyPropertyGrid : PropertyGrid {
        protected override void OnMouseMove(MouseEventArgs me) {
            //base.OnMouseMove(me);
            // do nothing, prevent user from moving the split bar
        }

        protected override void OnMouseDown(MouseEventArgs me) {
            //base.OnMouseDown(me);
        }
    }
}

Նշում․ բազային մեթոդները չկանչելը կողմնակի ազդեցություն կունենա, որ այդ իրադարձությունների ցանկացած լսող չի գործարկվի։

Պարզաբանում. կոդը կանխում է մանուշակագույն բաժանարարը: Ձեր հարցը վերաբերում է նարնջագույնին, թե մանուշակագույնին:

մուտքագրեք պատկերի նկարագրությունը այստեղ

23.09.2015
  • Դուք փորձե՞լ եք սա: Ոչ մի ազդեցություն չունի։ 24.09.2015
  • @LarsTech Այո, ես արեցի: Թվում էր, թե ստացվեց, բայց ես կրկնակի կստուգեմ: 24.09.2015
  • @LarsTech Ես կրկնակի ստուգեցի՝ օգտագործելով 35/40/45 և այն միանշանակ անջատում է բաժանարար սանդղակը բռնելու հնարավորությունը: Մկնիկը այլևս չի վերածվում HSplit կուրսորի, և բաժանարարի վրա սեղմելը ազդեցություն չի ունենում: 24.09.2015
  • Կներեք իմ անտեղյակությունը, բայց ի՞նչ է նշանակում 35/40/45: 24.09.2015
  • @LarsTech .NET35 .NET40 .NET45. 24.09.2015
  • Օ՜ myPropertyGrid1.SelectedObject = new StudentClass(); և ես դեռ կարող եմ փոխազդել բաժանարարի հետ: Windows 10, եթե դա կարևոր է: 24.09.2015
  • @LarsTech Այո, ես փորձարկել եմ օբյեկտով և առանց օբյեկտի, և բաժանարարն անջատված է: Հիմար հարց, բայց կարո՞ղ եք հաստատել new MyPropertyGrid()-ը, և այն ինքնավարտված չի եղել՝ օգտագործելով ընդամենը new PropertyGrid()-ը: 24.09.2015
  • Ես կրկնակի ստուգեցի. Իմ ձևը օգտագործում է MyProjectGrid դասը: 24.09.2015
  • @Loathing Ես օգտագործել եմ քո կոդը: Բայց փոփոխություն չկա։ Ես կարողանում եմ օգտագործել Splitter-ը: Պետք է ինչ-որ բան փոխե՞մ իմ շրջանակում: Ես օգտագործում եմ .Net 4 Հաճախորդի պրոֆիլը: Կամ եթե հնարավոր է, ուղղակի ուղարկեք ինձ աղբյուրի ֆայլը, ես դրանով կստուգեմ: 24.09.2015
  • @Gopi Գուցե ես սխալ եմ հասկանում հարցը. Կարո՞ղ եք պարզաբանել, թե որ բաժանարարը պետք է անջատվի: Կամ բոլորովին այլ բան: Ես նկար եմ տեղադրել վերևում: 24.09.2015
  • @Loathing Կներեք, որ դա չեմ նշել իմ Հարցում: Խոսքս Orange գույնի գծի մասին է 24.09.2015
  • Ակնհայտ է, որ ես միշտ նայում էի նարնջի բաժանարարին։ Լավ աշխատանք. 24.09.2015
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..