C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[30]: フォームの表示方法 [1]


(過去ログ 20 を表示中)

[トピック内 38 記事 (21 - 38 表示)]  << 0 | 1 >>

■7655 / inTopicNo.21)  Re[14]: フォームの表示方法
  
□投稿者/ arion (11回)-(2007/09/12(Wed) 15:52:04)
No7650 (渋木宏明(ひどり) さん) に返信

れいさん、魔界の仮面弁士さん、渋木宏明(ひどり)さん
返信ありがとうございます!!


> 簡単なサンプルを作ってみました。

ありがとうございます!
さっそくダウンロードしてみたのですが、
今自分が使っているのはMIcrosoft Visual Studio2003なので、プロジェクトファイルが開けませんでしたが
2003でもできますでしょうか?

> 最初の記事をちゃんと読み直してみたんですが、要は四角いパネルみたいなウィンドウがマウスカーソルを追っかけて蛇のように表示されればいいわけですよね?

そうです蛇のように追っかけてきて欲しいです。

欲をいえばデスクトップ上の好きなところで何らかのジェスチャをしたところにまず1つのはじめの四角いパネルを表示させたいです。


No7597 (れい さん) に返信

>> アイコンをクリックしたらその中身を表示したいのですが、それは実現可能だと思っていますが合っていますか?

> アイコンの中身とは?

例えばアイコン(パネル)に表示されていたのがマイコンピュータなら、そのアイコンをクリックしたらマイコンピュータのフォルダウィンドウが表示されるといった動作です。


WPFについてはなにも知識がないのですいません。。



よろしくおねがいします。
引用返信 編集キー/
■7656 / inTopicNo.22)  Re[15]: フォームの表示方法
□投稿者/ れい (125回)-(2007/09/12(Wed) 18:03:49)
No7655 (arion さん) に返信
> ■No7650 (渋木宏明(ひどり) さん) に返信
>
>>簡単なサンプルを作ってみました。
>
> 2003でもできますでしょうか?

できるかできないか、可能か不可能かを聞くのはナンセンスです。
アルゴリズムがかけるものなら理論上全て作成可能です。

ある個人に可能かどうかは別の話で、聞かれても誰にもわかりません。

できるかどうか、やってみましょう。
ソースのコピペぐらいできないと。

> 例えばアイコン(パネル)に表示されていたのがマイコンピュータなら、そのアイコンをクリックしたらマイコンピュータのフォルダウィンドウが表示されるといった動作です。

私のやり方なら普通にビットマップがあれば表示できます。
仮面弁士さんのやりかたでも、ひどりさんのやりかたでも、
ビットマップを描画するだけです。

ひどりさんのやりかたが一番知識が少なくて済むと思います。
ですがすごくたくさん表示すると重いかも。

仮面弁士さんのやりかたは.Netでサポートされてるので楽で、レイヤードなので軽いです。
ひどりさんのやりかたよりは知識がいるような気がします。

私のやり方が(.Netのサポートがないので)一番大変です。

私だったら本来の目的を考え、やはり最後のやりかたを用いると思いますが、
どの方法にも利点と欠点があります。

全ての方法について、どのように実現されてるのか仕組みをよく理解した上で
目的、必要スペック、自分の技量や開発にかけられる時間、などを考慮して
決定するのが本来です。

よくわからないのでしたら、とりあえず作ってみたらいいと思います。
引用返信 編集キー/
■7659 / inTopicNo.23)  Re[16]: フォームの表示方法
□投稿者/ arion (12回)-(2007/09/12(Wed) 19:02:09)
No7656 (れい さん) に返信

返信ありがとうございます!

>
> できるかできないか、可能か不可能かを聞くのはナンセンスです。
> アルゴリズムがかけるものなら理論上全て作成可能です。
>
> ある個人に可能かどうかは別の話で、聞かれても誰にもわかりません。
>
> できるかどうか、やってみましょう。
> ソースのコピペぐらいできないと。
>

すいません。

Form1.csのファイルを見てみたのですが、
コードのなかにpartial class というものがありますが、
これはvisual studio 2005から使えるものだとネットに書いてありました。

これは2003のバージョンでは使えるのでしょうか?


あとすごく初歩的で申し訳ないのですが、
自分のvisual studio2003にコピーする場合、どれをコピーすればよいのでしょうか?

自分では
Form1.cs
Form1.Designer.cs
Program.cs

Propertiesフォルダ内の
AssemblyInfo.cs
Resources.Designer.cs
Settings.Designer.cs
を同じフォルダ内にコピーしましたけど上手く実行できませんでした。

よろしくお願いします!

引用返信 編集キー/
■7660 / inTopicNo.24)  Re[17]: フォームの表示方法
□投稿者/ れい (127回)-(2007/09/12(Wed) 19:06:56)
No7659 (arion さん) に返信
> これはvisual studio 2005から使えるものだとネットに書いてありました。
> これは2003のバージョンでは使えるのでしょうか?

使えません。

> あとすごく初歩的で申し訳ないのですが、
> 自分のvisual studio2003にコピーする場合、どれをコピーすればよいのでしょうか?

私はファイルのコピーで動くとは言っていません。

> ソースのコピペぐらいできないと。

と、書きました。
よく読んでください。
引用返信 編集キー/
■7662 / inTopicNo.25)  Re[18]: フォームの表示方法
□投稿者/ arion (13回)-(2007/09/12(Wed) 19:11:05)
No7660 (れい さん) に返信

返信ありがとうございます。

すいません。
ご指摘ありがとうございます。

参考にしながら自分で書き直さないといけないということですよね。

頑張ってみます。


引用返信 編集キー/
■7681 / inTopicNo.26)  Re[19]: フォームの表示方法
□投稿者/ arion (14回)-(2007/09/13(Thu) 01:31:11)
渋木宏明(ひどり) さんのサンプルを参考にしました。

とりあえず、はじめに表示されたフォームからマウスが出た方向に新しいフォームが出るようになりました。

*****************************************************************


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace FormSnake
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();

//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
//
}

private void DoTarck() //マウスカーソルの位置を読み取って新しいフォームを作る
{
Point point = Cursor.Position;

this.Capture = false;

int x = this.Location.X;
int y = this.Location.Y;

if (point.X < this.Left)
{
x -= this.Width;
}
else if (this.Right < point.X)
{
x += this.Width;
}

if (point.Y < this.Top)
{
y -= this.Height;
}
else if (this.Bottom < point.Y)
{
y += this.Height;
}

Form1 form = new Form1();
form.StartPosition = FormStartPosition.Manual;
form.Location = new Point(x, y);
form.Show();
}

/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(120, 94);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Formsnake";
this.TopMost = true;
this.MouseLeave += new System.EventHandler(this.Form1_MouseLeave);
}
#endregion

/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_MouseLeave(object sender, System.EventArgs e)
{
this.DoTarck();
}

}
}

***********************************************************


渋木宏明(ひどり) さんのサンプルコードのForm1.csにある
IsTracking
HotForm
StartTrack
がどのような働きをしているのかがよくわかりません。

*****************************************************************

private static bool _IsTracking = false;

public static bool IsTracking
{
  get { return _IsTracking; }
  set { _IsTracking = value; }
}

private static Form1 _HotForm = null;

public static Form1 HotForm
{
  get { return _HotForm; }
  set { _HotForm = value; }
}

private void StartTrack()
{
  Form1.IsTracking = true;
  Form1.HotForm = this;

  this.Capture = true;
}

***********************************************

よろしければ教えて下さい!
よろしくお願いします。
引用返信 編集キー/
■7685 / inTopicNo.27)  Re[20]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (359回)-(2007/09/13(Thu) 02:33:33)
渋木宏明(ひどり) さんの Web サイト
> IsTracking
> HotForm
> StartTrack
> がどのような働きをしているのかがよくわかりません。

サンプルは、1枚目のフォームをクリックした後、マウスカーソルの後を追うように次々と新しいフォームを表示する、という仕様です。

IsTracking は、「マウスカーソルの後を追っているかどうか」を表す bool 値を保持しています。
まぁ、見ての通り、名前どおりの役割です。

HotForm は、最も最近表示されたフォームの参照です。
適当な名前が思いつかなかったので、こんな感じです。

StartTrack() は、名前のとおりの機能です。
「マウスカーソルの動きを捕捉して、次のフォームを表示するための準備」をしています。

具体的には、どのヘンが分からなかったのでしょうか?


引用返信 編集キー/
■7690 / inTopicNo.28)  Re[21]: フォームの表示方法
□投稿者/ arion (15回)-(2007/09/13(Thu) 06:49:15)
No7685 (渋木宏明(ひどり) さん) に返信

返信ありがとうございます!

理解できたと思います。

自分なりに作成してみました。ほとんどコピペしましたが(^^;)

******************************************************************************

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace FormSnake
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();

//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
//
}

private static bool _IsTracking = false;

public static bool IsTracking
{
get { return _IsTracking; }
set { _IsTracking = value; }
}

private static Form1 _HotForm = null;

public static Form1 HotForm
{
get { return _HotForm; }
set { _HotForm = value; }
}

private void StartTrack()
{
Form1.IsTracking = true;
Form1.HotForm = this;

this.Capture = true;
}




private void DoTarck() //マウスカーソルの位置を読み取って新しいフォームを作る
{
//if (!Form1.IsTracking) return;

Point point = Cursor.Position;
if (this.Bounds.Contains(point)) return;

this.Capture = false;

int x = this.Location.X;
int y = this.Location.Y;

if (point.X < this.Left)
{
x -= this.Width;
}
else if (this.Right < point.X)
{
x += this.Width;
}

if (point.Y < this.Top)
{
y -= this.Height;
}
else if (this.Bottom < point.Y)
{
y += this.Height;
}

Form1 form = new Form1();
form.StartPosition = FormStartPosition.Manual;
form.Location = new Point(x, y);
form.Show();
form.StartTrack();
}

private void DoAction()
{
this.Capture = false;

Form1.HotForm = null;
Form1.IsTracking = false;

MessageBox.Show("Yes!");

Program.MainForm.Close();
}


/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(120, 94);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Formsnake";
this.TopMost = true;
this.Click += new System.EventHandler(this.Form1_Click);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
this.MouseLeave += new System.EventHandler(this.Form1_MouseLeave);

}
#endregion

/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Program._MainForm = new Form1();
Application.Run(Program.MainForm);
}

private void Form1_MouseLeave(object sender, System.EventArgs e)
{
this.DoTarck();
Console.WriteLine("認識");
}

private void Form1_Click(object sender, System.EventArgs e)
{
if (!Form1.IsTracking)
{
this.StartTrack();
}
else
{
if (Form1.HotForm != Program.MainForm)
{
this.DoAction();
}
}
}

private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
Program.MainForm.Close();
}
}

}

public class Program
{
public static Form1 _MainForm = null;

public static Form1 MainForm
{
get { return _MainForm; }
}
}
}


************************************************************************

これで一応動作しました。

.NET Framework ver.1.1
visual studio .NET 2003
なのでいくつかの機能は使えませんでした。

しかし
DoTrackの中の
if (!Form1.IsTracking) return;
という記述があると動作しなかったため
//を使ってコメント状態にしてあります。

これは必要なのでしょうか?

よろしくお願いします。
引用返信 編集キー/
■7698 / inTopicNo.29)  Re[22]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (360回)-(2007/09/13(Thu) 10:54:17)
渋木宏明(ひどり) さんの Web サイト
2007/09/13(Thu) 10:57:03 編集(投稿者)

> これは必要なのでしょうか?

「どんな動作をさせたいのか」によります。

僕が定めた

> サンプルは、1枚目のフォームをクリックした後、マウスカーソルの後を追うように次々と新しいフォームを表示する、という仕様です。

という動きを実現するためには必要でした。

実現したい動きが異なれば、当然そのために必要なロジックも異なり、実装するべきコード内容も異なります。
引用返信 編集キー/
■7782 / inTopicNo.30)  Re[23]: フォームの表示方法
□投稿者/ arion (16回)-(2007/09/14(Fri) 17:49:37)
No7698 (渋木宏明(ひどり) さん) に返信
> 2007/09/13(Thu) 10:57:03 編集(投稿者)

返信ありがとうございます!


>>サンプルは、1枚目のフォームをクリックした後、マウスカーソルの後を追うように次々と新しいフォームを表示する、という仕様です。
>
> という動きを実現するためには必要でした。

クリックしたら動きましたすいません(^^;)
かなり希望に近い動きをしています。
ありがとうございます。

このフォームをランチャのように、デスクトップ上で何かしらのジェスチャ(例えば円を描く)をしたらそのところに表示させたいのですがこの動作は実現可能でしょうか?

C#ではグローバルマウスフックが実現不可能だという話を聞いた事があるのですが。

よろしくおねがいします!!
引用返信 編集キー/
■7784 / inTopicNo.31)  Re[24]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (361回)-(2007/09/14(Fri) 18:53:29)
渋木宏明(ひどり) さんの Web サイト
> このフォームをランチャのように、デスクトップ上で何かしらのジェスチャ(例えば円を描く)をしたらそのところに表示させたいのですがこの動作は実現可能でしょうか?

不可能ってことはないでしょうね。

そういう動作をするアプリもいつくかあるようですし。

> C#ではグローバルマウスフックが実現不可能だという話を聞いた事があるのですが。

原則はその通りです。

が、「低レベルフック」は C# でも可能なので、それであなたの想定する動作が得られるようなら「C# でも可能」ということになります。


引用返信 編集キー/
■7789 / inTopicNo.32)  Re[24]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (364回)-(2007/09/14(Fri) 19:14:32)
渋木宏明(ひどり) さんの Web サイト
> クリックしたら動きましたすいません(^^;)

サンプルのURLと一緒に書いといたやん。

> かなり希望に近い動きをしています。
> ありがとうございます。

参考になったようでよかったですが、所詮1時間くらいで作ったサンプルなので多くは期待しないでください。
随所に「手抜き」があります。

引用返信 編集キー/
■7925 / inTopicNo.33)  Re[25]: フォームの表示方法
□投稿者/ arion (17回)-(2007/09/19(Wed) 19:00:01)
No7789 (渋木宏明(ひどり) さん) に返信

返信ありがとうございます!!

マウスフックやマウスジェスチャについてネットで調べてみましたが、まだどのようにすればよいのかわかりません。

フォームの外でのマウスの動きを検知してほしいのですが、
低レベルフックを使えばフォーム内でクリックしたままなら、フォームの外にでてもマウスの動きは検知してくれることはわかりましたが、自分の作りたいものはそうではなくてデスクトップ上で何かしらのジェスチャをしたらそこにフォームを表示させたいです。

なにかしらヒントでもよいので教えていただきたいです。

あと、上記のプログラムで、新しく出てきたフォームをひとつ前のフォームにマウスが戻ったときに消すにはどのようにすればよいのでしょうか?


よろしくお願いします!
引用返信 編集キー/
■7930 / inTopicNo.34)  Re[26]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (368回)-(2007/09/20(Thu) 00:32:37)
渋木宏明(ひどり) さんの Web サイト
> マウスフックやマウスジェスチャについてネットで調べてみましたが、まだどのようにすればよいのかわかりません。

「マウスフック」という言葉はあまり見かけません。

いわゆる「マウスジェスチャ」を実現するために、Windows の「メッセージフック」という仕組みを使う、というのは理にかなっていると思います。

> 低レベルフックを使えばフォーム内でクリックしたままなら、フォームの外にでてもマウスの動きは検知してくれることはわかりましたが、自分の作りたいものはそうではなくてデスクトップ上で何かしらのジェスチャをしたらそこにフォームを表示させたいです。

低レベルフックは常時マウス関連のメッセージが受け取れるはずなので、「クリックしたまま」とかの条件付けは特に必要ありません。

Windows にマウスジェスチャを検出してアプリを起動するような機能なんかないですから、マウスジェスチャを検出して何かアクションを実行するためには、まず「マウスジェスチャを検出するためのプログラム」が実行されていなければなりません。

まぁ、マウスジェスチャの監視とジェスチャ検出の結果何らかのアクションを実行するプログラムは1本にまとめちゃうのが普通なんでしょうね。

なので、サンプルそのままに実行したら「でん」とフォームを表示するのではなく、タスクトレイに常駐してマウスメッセージを監視して、ジェスチャを検出したらフォームを表示すればいいんじゃないかと。

> あと、上記のプログラムで、新しく出てきたフォームをひとつ前のフォームにマウスが戻ったときに消すにはどのようにすればよいのでしょうか?

いやー、それを考える作業がプログラミングだと思うんだけど。。。

この場合は、まず「一つ前にマウスが戻ったとき」をプログラムで検出するにはどうするか?から考えるのがよろしいんじゃないかと。

引用返信 編集キー/
■7984 / inTopicNo.35)  Re[27]: フォームの表示方法
□投稿者/ arion (18回)-(2007/09/20(Thu) 20:55:14)
No7930 (渋木宏明(ひどり) さん) に返信

返信ありがとうございます!

いまさらで本当に申し訳ないのですが、今自分が作りたいのはタブレットPC上でペンで操作することを前提としています。
VisualStudio .NET2003
.NET Framework SDK Ver.1.1です。

ですので今一度自分で作り直しています。

何回も重複していてすいませんが、理想としては、
・デスクトップ上で何かしらのジェスチャを行うとそこにフォーム(inkpicture)が表示される。
・ペンで操作し、フォームの領域から出たらその方向に新しくinkpictureを表示する。
・この動作は繰り返され、ペンの軌道にそって蛇のようにinkpictureが表示される。
・ひとつ前のフォームに戻すと新しく表示されたフォームはその都度消える。

このようなものを考えています。

今は

フォームの領域から出たらその方向に新しくinkpictureを表示する

というところを作成しています。

**********************************************************
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using Microsoft.Win32;
using System.Runtime.InteropServices;
using Microsoft.Ink;
using System.Threading;
namespace WindowsApplication1
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.IContainer components;


public Form1()
{

//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();

//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
//
GetXYIndexes(ref indexX, ref indexY);


}

private Microsoft.Ink.InkPicture inkPicture1;
int indexX = 0;
int indexY = 0;





/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.inkPicture1 = new Microsoft.Ink.InkPicture();
this.SuspendLayout();
//
// inkPicture1
//
this.inkPicture1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.inkPicture1.Location = new System.Drawing.Point(0, 0);
this.inkPicture1.MarginX = -2147483648;
this.inkPicture1.MarginY = -2147483648;
this.inkPicture1.Name = "inkPicture1";
this.inkPicture1.Size = new System.Drawing.Size(70, 70);
this.inkPicture1.TabIndex = 0;
this.inkPicture1.NewPackets += new Microsoft.Ink.InkCollectorNewPacketsEventHandler(this.inkPicture1_NewPackets);
//
// Form1
//
this.AutoScale = false;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.ClientSize = new System.Drawing.Size(70, 70);
this.ControlBox = false;
this.Controls.Add(this.inkPicture1);
this.ForeColor = System.Drawing.SystemColors.ActiveCaption;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

[DllImport("user32.dll")]
extern static void mouse_event(
int dwFlags,int dx,int dy,int mouseData, int dwExtraInfo
);

/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
this.Size = new Size(70, 70);
//インクを透明にする
this.inkPicture1.DefaultDrawingAttributes.Color = System.Drawing.Color.Transparent;
inkPicture1.DefaultDrawingAttributes.Transparency = 255;
}


private void GetXYIndexes(ref int theXIndex, ref int theYIndex)
{
Guid[] theGuids = inkPicture1.DesiredPacketDescription;

for (int i=0; i<theGuids.Length -1; i++)
{
if (theGuids[i].Equals(PacketProperty.X))
theXIndex = i;

if (theGuids[i].Equals(PacketProperty.Y))
theYIndex = i;
}
}

private void inkPicture1_NewPackets(object sender, Microsoft.Ink.InkCollectorNewPacketsEventArgs e)
{
int x = this.Location.X;
int y = this.Location.Y;

if (e.PacketData[indexX] < this.Left)
{

x -= this.Width;
Form1 form = new Form1();
form.StartPosition = FormStartPosition.Manual;
form.Location = new Point(x, y);
form.Show();

Console.WriteLine("ここを認識している");


}
}
}
}

**********************************************************

inkPicture1_NewPacketsイベントのところで今行き詰っています。
最初に表示されてるinkpictureの左側に出たらその方向に新しく表示させたいのですが、
このコードではうまく動いてくれません。
if文内は認識されているようですが、何回も認識されてしまっています。


どんなささいなことでもいいので何かアドバイスを頂けたらうれしいです。

よろしくお願いします!!
引用返信 編集キー/
■8023 / inTopicNo.36)  Re[28]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (374回)-(2007/09/21(Fri) 12:05:24)
渋木宏明(ひどり) さんの Web サイト
2007/09/21(Fri) 12:12:36 編集(投稿者)

> どんなささいなことでもいいので何かアドバイスを頂けたらうれしいです。

んー、申し訳ないけど、そこまで「ロジックを考えてください」「デバッグしてください」的な内容だと、答える気にならないです。僕は。

もっと具体的な問題に切り分けられませんか?

例えば、時間をかければお望みどおりのコードを「書いてあげる」ことはできると思うけど、それじゃ誰が作ったプログラムだかわかんなくなっちゃうじゃないですか。

そういうところにはあんまりこだわりとかはないのかな? そういうところこそが自分で付加価値を生み出しているところだと思うんだけど。。。

> if文内は認識されているようですが、何回も認識されてしまっています。

「何回も認識されてしまう」のが困るなら、それを避けるような仕組みを自分で追加すればいんでなくて?

あと、「何故そうなってしまうのか」についても考えてみました?

原因が分かれば、それに応じて対策を考えてみたり、もっと小さな、具体的な問題に切り分けたりとかができるんじゃないかと。

引用返信 編集キー/
■8246 / inTopicNo.37)  Re[29]: フォームの表示方法
□投稿者/ arion (19回)-(2007/09/26(Wed) 19:39:03)
No8023 (渋木宏明(ひどり) さん) に返信

返信ありがとうございます。

ご指摘ありがとうございます。
以後もっと具体的に言えるように気をつけます。

上記とは違った質問があります。
この動作をしていて、例えば最初のフォームから上下方向に動かしているときには、そこに表示される
一つ一つのアイコンはマイドキュメントの中身(マイピクチャやマイミュージック)のみが表示され、
方向を変えた場合(この場合には左右)にはその直前のアイコンの中身が左右に表示される
(例:マイピクチャのところで左にペンを動かしたらマイピクチャの中身が表示される)、
といったようにしたいと思っています。
マウスでアイコンをダブルクリックして下の階層に行くという動作を、
ペンでの方向を90度変えるという動作で行いたいと思っています。
そして中身をいっぺんに表示させるのではなく一つ一つ表示させたいです。
方向を変化させるごとに1つ階層が下がるという感じです。
このような動作を実現したいと思っています。

そこでまず、inkpicture上にマイドキュメントの中身のアイコンを一つ一つ表示させていきたいとおもっています。
そこでlistviewコントロールを使って試しているのですが、
現在のPCに入っているデータ(マイドキュメントの中身)をプログラムの中に反映させて表示させることは可能でしょうか?
それとも一つ一つ自分で追加していかないといけないのでしょうか?

よろしくおねがいします!
引用返信 編集キー/
■8255 / inTopicNo.38)  Re[30]: フォームの表示方法
□投稿者/ 渋木宏明(ひどり) (386回)-(2007/09/26(Wed) 21:44:22)
渋木宏明(ひどり) さんの Web サイト
> 現在のPCに入っているデータ(マイドキュメントの中身)をプログラムの中に反映させて表示させることは可能でしょうか?

不可能と考える理由は特に無いと思います。
エクスプローラをはじめとして、マイドキュメント配下やその他のフォルダの内容を表示しているアプリケーションは沢山ありますよね。

> それとも一つ一つ自分で追加していかないといけないのでしょうか?

何を、どこに、でしょう?
ListView に、ファイル名を、であるなら「ファイル名を列挙しつつ、ListView.Items.Add() する」のが順当と思います。

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -