[NetAdvantage]如何使UltraWinGrid的Cell得到焦点并进入编辑状态

Posted by dohkoos on December 7th, 2007 (683 views)

首先要将grid中要得到焦点并进入编辑状态的cell置为ActiveCell,这可以通过下面的语句做到,
//this.grid.ActiveCell = this.grid.Rows[0].Cells["Name"];
this.grid.Rows[0].Cells["Name"].Activate();

然后就是给grid发送一个EnterEditMode消息。
this.grid.PerformAction(UltraGridAction.EnterEditMode);

如果要使grid窗口一打开该Cell就进入编辑状态,可以将上面的代码放在窗口的Actived事件中(该事件是窗口打开时处理的最后一个事件)。
private void UltraGridTest_Activated(object sender, EventArgs e)
{
    this.grid.ActiveCell = this.grid.Rows[0].Cells["Name"];
    this.grid.PerformAction(UltraGridAction.EnterEditMode);
}

Related Posts

People who read this, also read...

[NetAdvantage]如何触发UltraTextEditor上的DoubleClick事件

Posted by dohkoos on October 26th, 2007 (356 views)

在UltraTextEditor控件上绑定DoubleClick事件,然后双击它的Edit区域,这时DoubleClick事件并不会被触发。究其原因是当UltraTextEditor控件处于编辑模式(edit mode)时,它会在控件上方显示一个编辑窗口(edit window),所以这时候的DoubleClick事件实际上是发生在编辑窗口上。
UltraTextEditor ute = new UltraTextEditor();
ute.DoubleClick += new System.EventHandler(ute_DoubleClick)

解决方法是监视UltraTextEditor控件上的ControlAdded和ControlRemoved事件,在这两个事件的方法内动态地在编辑窗口(edit window)控件上挂接DoubleClick事件,代码如下:
using System;
using System.Windows.Forms;
using Infragistics.Win.UltraWinEditors;

UltraTextEditor ute = new UltraTextEditor();
this.ute.ControlAdded += new ControlEventHandler(this.ute_ControlAdded);
this.ute.ControlRemoved += new ControlEventHandler(this.ute_ControlRemoved);

private void ute_ControlAdded(object sender, ControlEventArgs e)
{
    e.Control.DoubleClick += new EventHandler(control_DoubleClick);
}

private void ute_ControlRemoved(object sender, ControlEventArgs e)
{
    e.Control.DoubleClick -= new EventHandler(control_DoubleClick);
}

Related Posts

People who read this, also read...

[NetAdvantage]输入无效日期值后不能离开UltraMaskedEdit的问题

Posted by dohkoos on September 27th, 2007 (584 views)

在Form上放置两个控件,一个UltraTextEditor控件和一个UltraMaskedEdit控件,并将UltraMaskedEdit控件的InputMask属性设为mm/dd/yyyy。这时如果在UltraMaskedEdit控件中输入了无效的日期值,就会导致不能离开这个控件--按TAB键或点击UltraTextEditor控件不起作用。解决方法是创建一个继承IEditorDataFilter接口的DataFilter类,当数据转换方向是DisplayToEditor时就判断UltraMaskedEdit的值是否是一个有效的日期值,如果不是的话就返回null。下面的完整的代码实现:
class DateTimeEditorDataFilter : Infragistics.Win.IEditorDataFilter
{
    public object Convert(Infragistics.Win.EditorDataFilterConvertArgs args)
    {
        switch(args.Direction)
        {
        case ConversionDirection.DisplayToEditor:
            args.Handled = true;

            DateTime dt;
            if (DateTime.TryParse((string)args.Value, out dt))
            {
                return dt;
            }
            break;
        }
        return null;
    }
}

Related Posts

People who read this, also read...

[NetAdvantage]如何隐藏UltraCombo的下拉按钮

Posted by dohkoos on September 24th, 2007 (511 views)

UltraCombo没有可以直接控制下拉按钮(drop down button)隐藏的属性。因此,要想隐藏下拉按钮就必须使用DrawFilter或CreationFilter。

使用DrawFilter必须实现IUIElementDrawFilter接口。IUIElementDrawFilter接口有两个方法:GetPhasesToFilter和DrawElement。

GetPhasesToFilter方法用来表示哪些绘制操作阶段(Phase)需要被过滤出来,并且在这些相应的绘制操作阶段DrawElement方法会被调用。DrawElement方法确定是否执行默认的绘制操作,当DrawElement返回false的时候表示执行默认的绘制操作,返回true则不执行。由此可知,只要在GetPhasesToFilter中过滤出下拉按钮的绘制阶段,然后在DrawElement中返回true就可以隐藏起下拉按钮了。

因为UltraCombo的下拉按钮属于EditorWithComboDropDownButtonUIElement类型,所以在GetPhasesToFilter可以通过判断当前要绘制的Element是否是一个EditorWithComboDropDownButtonUIElement类型,如果是的话就将当前要绘制的Element的BeforeDrawElement过滤出来
public Infragistics.Win.DrawPhase GetPhasesToFilter(ref Infragistics.Win.UIElementDrawParams drawParams)
{
    // 在绘制下拉按钮前调用DrawElement方法
    if (drawParams.Element is EditorWithComboDropDownButtonUIElement)
        return DrawPhase.BeforeDrawElement;
    return DrawPhase.None;
}

public bool DrawElement(Infragistics.Win.DrawPhase drawPhase, ref Infragistics.Win.UIElementDrawParams drawParams)
{
    // 不执行默认的绘制操作,即不绘制下拉按钮
    return true;
}

有时候我们可能需要动态控制下拉按钮的显示。譬如,当UltraCombo控件enabled的时候显示下拉按钮,disabled的时候下拉按钮消失。这很容易就可以做到,只要在DrawElement方法中添加一条判断语句就行了
public bool DrawElement(Infragistics.Win.DrawPhase drawPhase, ref Infragistics.Win.UIElementDrawParams drawParams)
{
    if (drawParams.Element.Enabled)
        return false;
    return true;
}

Related Posts

People who read this, also read...