C++ Builder 10.2 Tokyo > Ctrl+c, Ctrl+v 키(3 및 22) | TComboBox >Ctrl+c, Ctrl+v에서 선택 항목 복사 붙여넣기

운영 환경
RAD Studio 10.2 Tokyo Update 3

처리 개요


  • 여러 TComboBox
  • 한 TComboBox에서 다른 TComboBox로 설정을 복사하고 싶습니다 (Ctrl + C, Ctrl + V)

  • 참고



  • h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 840144 / 호 w - ぢ 사 b
  • OnKeyPress ()로 처리
  • 처리시 키 입력 취소
  • C가 처리되지 않도록 방지

  • Ctrl+C와 Ctrl+V는 각각 322 라는 코드를 사용합니다


  • 구현



    Unit1.h
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE で管理されるコンポーネント
        TComboBox *ComboBox1;
        TComboBox *ComboBox2;
        void __fastcall ComboBox1KeyPress(TObject *Sender, System::WideChar &Key);
        void __fastcall FormShow(TObject *Sender);
    
    private:    // ユーザー宣言
        signed int m_preserved_key; // Ctrl+C押下時に保存する
    public:     // ユーザー宣言
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    

    Unit1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    /*
    Reference: Ctrl+CとCtrl+V
    https://stackoverflow.com/questions/840144/how-to-disable-copy-paste-in-tedit
    */
    
    void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, System::WideChar &Key)
    {
        if (Key == 3) { // Ctrl+C
            // 1. 選択の保持
            TComboBox *cbPtr = (TComboBox*)Sender;
            m_preserved_key = cbPtr->ItemIndex;
            // 2. 入力のキャンセル
            Key = 0x00; // C入力としての処理を発生させないため
        }
    
        if (Key == 22) { // Ctrl+V
            if (m_preserved_key >=-1) {
                TComboBox *cbPtr = (TComboBox*)Sender;
                cbPtr->ItemIndex = m_preserved_key;
            }
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        m_preserved_key = -10; // -10: 任意 (-1はコンボボックス非選択という意味があるため、-1以外の値)
    
        // 2つのコンポーネントに同じ処理を設定
        ComboBox1->OnKeyPress = ComboBox1KeyPress;
        ComboBox2->OnKeyPress = ComboBox1KeyPress;
    }
    //---------------------------------------------------------------------------
    

    실행 예



    선택은 많다


    위의 Geordi La Forge 설정을 Ctrl+C, Ctrl+V에서 아래로 복사한 후

    좋은 웹페이지 즐겨찾기