程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Builder初學問與答5

C++ Builder初學問與答5

編輯:C++入門知識

  38)問:事件OnChange和OnScorll都可以描述滾動條的滾動事件,他們有什麼區別嗎?

  答:事件OnChange和OnScorll是有區別的。只要屬性Position的值發生改變,那麼無論這個值是用戶操作滾動條引起的還是通過程序修改的,都會產生OnChange事件。而OnScorll事件只有在用戶操作滾動條時才發生。當用戶操作滾動條時,首先發生OnScorll事件,然後OnChange事件才會發生。

  下面我們共同看一個程序來加深對滾動條的理解。

  在窗體上放置一個水平滾動條ScrollBar1和一個垂直滾動條ScrollBar2,以及一個記錄滾動條事件的Memo組件。當用戶操作滾動條時,在Memo組件中就會顯示發生的事件。

  選擇Memo組件,把它的ScrollBars屬性設置為ssVertical。

  選擇水平滾動條組件,雙擊OnScroll的Value域,系統將生成事件處理模板,輸入這樣一段代碼。

  

void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
AnsiString temp;
if(Sender==ScrollBar2)
temp="垂直滾動條的";
else
temp="水平滾動條的";
switch(ScrollCode)
{
case scLineUp:temp+="scLineUp";break;
case scLineDown:temp+="scLineDown";break;
case scPageUp:temp+="scPageUp";break;
case scPageDown:temp+="scPageDown";break;
case scPosition:temp+="scPosition";break;
case scTrack:temp+="scTrack";break;
case scTop:temp+="scTop";break;
case scBottom:temp+="scBottom";break;
case scEndScroll:temp+="scEndScroll";break;
default:
temp+="未知";break;
}
Memo1->Lines->Append(temp+"事件");
}

  第一條語句聲明一個AnsiString類型的變量,用來存放將要顯示的字符串。

  第二條語句判斷發送事件的對象,如果是垂直滾動條,將temp初始化為 “垂直滾動條的”,否則初始化為 “水平滾動條的”。

  第三條語句根據ScrollCode的值,顯示相應的事件。

  最後一條語句將要顯示的字符串加到文本框的末尾。

  在窗體中選擇垂直滾動條組件,選擇Events標簽,單擊OnScroll的Value域,從下拉列表框中選擇ScrollBar1Scroll事件處理程序。這樣,垂直滾動條和水平滾動條將共用一個事件處理程序。

  選擇水平滾動條組件,選擇Events標簽,雙擊OnChange域,然後輸入:

  Memo1->Lines->Append("水平滾動條的OnChange事件");

  它將在文本框後面顯示水平滾動條改變的信息。

  類似的,給垂直滾動條的OnChange事件加上如下代碼:

  Memo1->Lines->Append("垂直滾動條的OnChange事件");

  詳細代碼如下:

  

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
AnsiString temp;
if(Sender==ScrollBar2)
temp="垂直滾動條的";
else
temp="水平滾動條的";
switch(ScrollCode)
{
case scLineUp:temp+="scLineUp";break;
case scLineDown:temp+="scLineDown";break;
case scPageUp:temp+="scPageUp";break;
case scPageDown:temp+="scPageDown";break;
case scPosition:temp+="scPosition";break;
case scTrack:temp+="scTrack";break;
case scTop:temp+="scTop";break;
case scBottom:temp+="scBottom";break;
case scEndScroll:temp+="scEndScroll";break;
default: temp+="未知";break;
}
Memo1->Lines->Append(temp+"事件");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
Memo1->Lines->Append("水平滾動條的OnChange事件");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
{
Memo1->Lines->Append("垂直滾動條的OnChange事件");
}
//---------------------------------------------------------------------------

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved