掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デスピサロ (ID:147110)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
何度も質問しますが,「ドットスロ」って何ですか? よくわかりませんので,スロット風のサンプルを作ってみました。 が,どのあたりで「シフト演算」を使うと有効なのか全然わかりません。 何か根本的な勘違いがあるのでしょう。「暴走機関車」はどこにも ありませんが,これで「宿題」とやらの提出とさせてください。 三木谷浩先生,宿題の添削&模範解答をお願いします。 Imports System.Threading Public Class Form1 Dim Slot(2) As Drum Dim WithEvents StartButton As New Button Dim StopButton(2) As Button Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To Slot.Length - 1 Slot(i) = New Drum Slot(i).SetBounds(i * 64, 0, 64, 64) StopButton(i) = New Button StopButton(i).Text = "ストップ" StopButton(i).Tag = i StopButton(i).SetBounds(i * 64, 64, 64, 24) AddHandler StopButton(i).Click, AddressOf StopButton_Click StartButton.Text = "スタート" StartButton.SetBounds(64 * 3, 0, 64, 24) Next Me.Controls.AddRange(Slot) Me.Controls.AddRange(StopButton) Me.Controls.Add(StartButton) End Sub Private Sub StartButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartButton.Click For Each s As Drum In Slot s.Start() Next End Sub Private Sub StopButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Slot(CInt(DirectCast(sender, Button).Tag)).Stop() End Sub Class Drum Inherits PictureBox Private _DrumPosition As Integer Private _Timer As Timer Private _Flag As Boolean Sub New() Dim DrumString As String() = New String() {"★", "◎", "□", "△", "◆", "♂", "★"} Me.Image = New Bitmap(32, 32 * DrumString.Length) Using g As Graphics = Graphics.FromImage(Me.Image) g.FillRectangle(Brushes.Green, Rectangle.Round(g.VisibleClipBounds)) For i As Integer = 0 To DrumString.Length - 1 g.DrawString(DrumString(i), New Font("MS ゴシック", 18), Brushes.White, New RectangleF(0, 32 * i + 4, 32, 28)) Next End Using End Sub Public Sub Start() If Not Me._Flag Then Me._Flag = True Me._Timer = New Timer(AddressOf _Timer_Tick) Me._Timer.Change(0, 1) End If End Sub Public Sub [Stop]() Me._Flag = False End Sub Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs) pe.Graphics.DrawImage(Me.Image, Me.ClientRectangle, New Rectangle(0, Me._DrumPosition, 32, 32), GraphicsUnit.Pixel) End Sub Private Sub _Timer_Tick(ByVal state As Object) Me._DrumPosition += CInt(IIf(Me._Flag, 4, 1)) If Me._DrumPosition + 32 > Me.Image.Height Then Me._DrumPosition -= Me.Image.Height - 32 End If If Not Me._Flag AndAlso Me._DrumPosition Mod 32 = 0 Then Me._Timer.Dispose() End If Me.Invalidate() End Sub End Class End Class
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.