Button.OnClick

Button.OnClickが、Clickイベントを発生させる。

Button.OnClick(EventArgs) メソッド (System.Web.UI.WebControls) | Microsoft Docs

Buttonを継承したCustomButtonを定義して、OnClickが呼ばれてるか確認。
Default.aspxは、

form1だけ。
CustomButton.csを追加し、

base.OnClickを挟むようにログを入れる。
Default.aspx.csは、

form1にcustomButtonを追加。

これがクリックすると、
これがクリックすると、

これがクリックすると、

こうなって、
こうなって、

こうなって、この時のログは、

こうなる。
こうなる。

こうなる。

Sample/aspnet/Button/OnClick/src/Button_ at master · bg1bgst333/Sample · GitHub

Win32_USBHub::DeviceID

特定のUSBデバイスを表すのに、DeviceIDというプロパティはよく使われる。

Win32\_USBHub class | Microsoft Docs

Win32_USBHub.cppで、

DeviceIDも出力してみる。
前回、大容量記憶装置として認識されたポータブルUSBHDDを挿している場合、

DeviceIDはだいたいこんな感じで出力される。
DeviceIDはだいたいこんな感じで出力される。

だいたいこんな感じで出力される。
(まあ、白で隠す必要無い気もするけど、一応・・・。)

Sample/wmi/Win32_USBHub/DeviceID/src/Win32_USBHub at master · bg1bgst333/Sample · GitHub

Button.Click

WebサーバコントロールのButtonコントロールは、Clickイベントにイベントハンドラを登録する。

Button.Click イベント (System.Web.UI.WebControls) | Microsoft Docs

Default.aspx.csで、

こうすると、

Button1を押したときに
Button1を押したときに

Button1を押したときに、

タブが"Clicked!"に変わる
タブが"Clicked!"に変わる

タブが"Clicked!"に変わる。

Sample/aspnet/Button/Click/src/Button_ at master · bg1bgst333/Sample · GitHub

Win32_USBHub

Win32_USBHubクラスは、USBデバイスの列挙に使うクラスの一種。

Win32\_USBHub class | Microsoft Docs
WMI タスク: コンピューターハードウェア - Win32 apps | Microsoft Docs

ただ、「USBハブの管理特性を表す」らしく、これが挿している全てのUSBデバイスを列挙するわけではなさそう。
USBハブとして機能するものだけなのかな。
Win32_USBHub.cppで、

NameとCaptionに日本語が混じるので、コンソールだとややこしいので、ShiftJISに変換して出力。
Surface Proの場合、何も挿していない時は、

CoCreateInstance OK!
pLocator = 0x00790508
pLocator->ConnectServer OK!
pServices = 0x00790208
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
pEnumerator = 0x007a83e0
pEnumerator->Next OK!
pClassObject = 0x007a86b0
pClassObject->Get OK!
Name: USB ルート ハブ (USB 3.0)
pClassObject->Get OK!
Caption: USB ルート ハブ (USB 3.0)

USB ルート ハブだけ。
挿しているものではなくて、PC自身のルートハブデバイス
手持ちのひとつ前のモデルのポータブルUSBHDDだと、

CoCreateInstance OK!
pLocator = 0x00750628
pLocator->ConnectServer OK!
pServices = 0x0074fcb8
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
pEnumerator = 0x0075fa78
pEnumerator->Next OK!
pClassObject = 0x00767a28
pClassObject->Get OK!
Name: USB ルート ハブ (USB 3.0)
pClassObject->Get OK!
Caption: USB ルート ハブ (USB 3.0)
pEnumerator->Next OK!
pClassObject = 0x00767a28
pClassObject->Get OK!
Name: USB 大容量記憶装置
pClassObject->Get OK!
Caption: USB 大容量記憶装置

"USB 大容量記憶装置"という名前で、挿しているポータブルUSBHDDが追加された。
手持ちの最新のモデルのポータブルUSBHDDだと、

CoCreateInstance OK!
pLocator = 0x007c0618
pLocator->ConnectServer OK!
pServices = 0x007c0208
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
pEnumerator = 0x007d7450
pEnumerator->Next OK!
pClassObject = 0x007d8818
pClassObject->Get OK!
Name: USB ルート ハブ (USB 3.0)
pClassObject->Get OK!
Caption: USB ルート ハブ (USB 3.0)

出てこない。
昔の違うタイプのポータブルUSBHDDでも、

CoCreateInstance OK!
pLocator = 0x004f1fb8
pLocator->ConnectServer OK!
pServices = 0x004f13b0
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
pEnumerator = 0x004f6030
pEnumerator->Next OK!
pClassObject = 0x0050eca0
pClassObject->Get OK!
Name: USB ルート ハブ (USB 3.0)
pClassObject->Get OK!
Caption: USB ルート ハブ (USB 3.0)

出てこない。
この結果から、挿しているUSBデバイスの列挙にWin32_USBHubを使うのは好ましくないようだ。

Sample/wmi/Win32_USBHub/Win32_USBHub/src/Win32_USBHub at master · bg1bgst333/Sample · GitHub

Button

これまでは、HTMLのタグを拡張したHTMLサーバコントロールを扱ってきたが、ここからはASP.NET特有のコントロール、Webサーバコントロールを扱う。
まずは、Buttonコントロール

Button クラス (System.Web.UI.WebControls) | Microsoft Docs
Web フォームとは? - はじめての ASP.NET - ASP.NET 入門

<asp:Button>というタグで定義する。
Default.aspxで、

と書く。

Button1が表示された。
Button1が表示された。

Button1が表示された。
ちなみにHTMLソースを見ると、

こうなっている。
こうなっている。

こうなっている。
複雑そう。

Sample/aspnet/Button/Button/src/Button_ at master · bg1bgst333/Sample · GitHub

Win32_ComputerSystem::Model

このコンピュータの製品名は、Modelプロパティで取得する。

Win32_ComputerSystem クラス - Win32 apps | Microsoft Docs

Win32_ComputerSystem.cppで、

Modelも取得する。

CoCreateInstance OK!
pLocator = 0x006be010
pLocator->ConnectServer OK!
pServices = 0x006c8768
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
pEnumerator = 0x006c2388
pEnumerator->Next OK!
pClassObject = 0x006d4aa8
pClassObject->Get OK!
Name: DESKTOP-PUSH7HT
pClassObject->Get OK!
UserName: DESKTOP-PUSH7HT\bg1
pClassObject->Get OK!
Domain: WORKGROUP
pClassObject->Get OK!
Model: Surface Pro

まあSurface Proで動かしてるからね。

Sample/wmi/Win32_ComputerSystem/Model/src/Win32_ComputerSystem at master · bg1bgst333/Sample · GitHub

Page.IsPostBack

<input>タグのtypeが"submit"だったり、<input>タグのtypeが"button"や<button>タグでもServerClickにハンドラを登録していたりする場合で、押すとPageがリロードされてform情報が自分自身に送信される。
これをPostBackというらしいが、最初にPageをLoadする時も、PostBackする時も、Loadは呼ばれるので、Page.IsPostBackでPostBackかどうかを判定する。

Page.IsPostBack プロパティ (System.Web.UI) | Microsoft Docs

Default.aspxが、

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Page_._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <input id="text1" type="text" value="text1" runat="server" />
            <input id="input1" type="button" value="input1" runat="server" />
            <input id="submit1" type="submit" value="submit1" runat="server" />
        </form>
    </body>
</html>

Default.aspx.csが、

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Page_
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                Title = "IsPostBack == true";
            }
            else
            {
                Title = "IsPostBack == false";
            }
        }
    }
}

この時、

最初のLoadではfalse。
最初のLoadではfalse。

最初のLoadではfalse。

input1にハンドラ登録してないので何も起きないのでfalse。
input1にハンドラ登録してないので何も起きないのでfalse。

input1にハンドラ登録してないので何も起きないのでfalse。

submitは、HTMLの機能としてPostBackするのでtrue。
submitは、HTMLの機能としてPostBackするのでtrue。

submitは、HTMLの機能としてPostBackするのでtrue。
さて、

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Page_
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                Title = "IsPostBack == true";
            }
            else
            {
                Title = "IsPostBack == false";
                input1.ServerClick += new EventHandler(input1_ServerClick);
            }
        }

        void input1_ServerClick(object sender, EventArgs e)
        {
            text1.Value = "Clicked!";
        }
    }
}

最初のLoadで、input1のServerClickにハンドラを登録。

最初のLoadではfalse。
最初のLoadではfalse。

最初のLoadではfalse。

input1を押すと、trueになるが、text1が変わらない。
input1を押すと、trueになるが、text1が変わらない。

input1を押すと、trueになるが、text1が変わらない。

最初、ハンドラ登録はしてる。
最初、ハンドラ登録はしてる。

最初、ハンドラ登録はしてる。

input1を押すと、trueになる。
input1を押すと、trueになる。

input1を押すと、trueになる。
でも下のハンドラに来ない。
リロードしてるから、オブジェクトが一新されて、ハンドラが無いのかな。
そこで、Default.aspxで、

onserverclickでハンドラ登録するようにした。
Default.aspx.csは、

とする。

最初はfalse。
最初はfalse。

最初はfalse。

つまりこう。
つまりこう。

つまりこう。
input1を押すと、

ハンドラ登録されてるのでPostBackになる
ハンドラ登録されてるのでPostBackになる

ハンドラ登録されてるのでPostBackになる。

こちらだとハンドラが呼ばれてtext1が変わってる。
こちらだとハンドラが呼ばれてtext1が変わってる。

こちらだとハンドラが呼ばれてtext1が変わってる。

Sample/aspnet/Page/IsPostBack/src/Page_ at master · bg1bgst333/Sample · GitHub