概要 anchor.png Edit

数値しか入力することの出来ないテキストボックスを作成するには、onKeyPressとonTextChangedをオーバーライドする必要があります。

参考: http://dobon.net/vb/dotnet/control/numerictextbox.html

Page Top

ポイント anchor.png Edit

文字列はUTF-8ですので、マルチバイトな文字列に対応するため、foreach (dchar c; text) を利用して、UTF-8からUTF-32に変換してswitch しています。逆に、 char[] な配列に dchar を連結させることで、UTF-8に変換しなおしています。

KeyPressEventArgs や KeyEventArgs には handled というメンバがあり、これを true にすることで、入力を無視することなどが可能となります。

Page Top

サンプルコード anchor.png Edit

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
 
 
 
-
|
-
|
-
|
|
|
|
|
|
!
!
|
-
|
|
|
-
|
-
|
|
|
|
|
!
!
|
-
|
|
!
!
!
 
 
-
|
|
|
|
|
!
import dfl.all;
pragma(lib, "dfl");
 
class NumericTextBox: TextBox
{
    void onKeyPress(KeyPressEventArgs ea)
    {
        switch (ea.keyChar)
        {
        case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
             'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z':
            ea.handled = true;
            break;
        default:
            super.onKeyPress(ea);
        }
    }
    void onTextChanged(EventArgs ea)
    {
        string str;
        auto ss = selectionStart;
        foreach (dchar c; text)
        {
            switch (c)
            {
            case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
                str ~= c;
                break;
            default:
                ss--;
            }
        }
        if (str != text)
        {
            text = str;
            selectionStart = ss;
        }
    }
}
 
void main()
{
    auto form = new Form;
    auto tb = new NumericTextBox;
    tb.parent = form;
    tb.dock = DockStyle.TOP;
    Application.run(form);
}

実行結果はGUIで、挙動が問題なため省略

Page Top

投票とコメント anchor.png Edit

Choices Vote
大変参考になった0  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/SampleCodes​/DFL​/TextBox​/4Edit

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1813, today: 2, yesterday: 0
Princeps date: 2012-01-26 (Thu) 02:46:26
Last-modified: 2012-01-26 (Thu) 02:46:26 (JST) (3285d) by SHOO
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu