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

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

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

Re[9]: Form1からForm2へ


(過去ログ 95 を表示中)

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

■57008 / inTopicNo.1)  Form1からForm2へ
  
□投稿者/ ボールペン! (1回)-(2011/02/08(Tue) 21:21:08)

分類:[VB.NET/VB2005 以降] 

Visual Studio2008 で開発をしております。

Form2のテキストボックスと複数のラベルのテキストをForm1のテキストボックスと

複数のラベルに代入しようとするのですが・・・なぜかテキストボックスと一部のラベルしか

反映されません。ブレークポイントで止めながらやるとうまく反映されるのですが・・・。

コードの記述の仕方が悪いのでしょうか?

Form1.textbox1.text=textbox1.text
Form1.label1.text=label1.text
Form1.label2.text=label2.text
Form1.label3.text=label3.text
Form1.label4.text=label4.text
Form1.label5.text=label5.text

というようなコードで記述しております。

なにかコードに問題があるのか・・・他の要因があるのかがわかりません。

似たような現象を経験したことがある方、原因が分かる方いらっしゃいましたら

教えてください。 

宜しくお願いします。
引用返信 編集キー/
■57010 / inTopicNo.2)  Re[1]: Form1からForm2へ
□投稿者/ shu (417回)-(2011/02/08(Tue) 22:03:44)
No57008 (ボールペン! さん) に返信

これがどこに記述されていてこの後何を行っているかでそんな現象も発生するかと思います。
引用返信 編集キー/
■57023 / inTopicNo.3)  Re[2]: Form1からForm2へ
□投稿者/ マサヤ (251回)-(2011/02/09(Wed) 11:43:12)
1.Form1が表示されています。
2.Form2をForm1から開きます。
3.Form2でテキストボックスに値を入力します。
4.Form2を閉じます。
5.Form1にForm2で入力した値が反映。

やりたいことはこういうことですか?
引用返信 編集キー/
■57032 / inTopicNo.4)  Re[3]: Form1からForm2へ
□投稿者/ ボールペン! (2回)-(2011/02/09(Wed) 14:07:33)
shuさん 
>これがどこに記述されていてこの後何を行っているかでそんな現象も発生するかと思います。

Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
'クリックされたセルの番地からrowNOを取得
Dim i As Integer = FpSpread1.ActiveSheet.ActiveRowIndex

Form1.TextBox70.Text = FpSpread1.ActiveSheet.Cells(i, 0).Text
Form1.Label140.Text = FpSpread1.ActiveSheet.Cells(i, 1).Text
Form1.Label141.Text = FpSpread1.ActiveSheet.Cells(i, 2).Text
Form1.Label143.Text = FpSpread1.ActiveSheet.Cells(i, 3).Text
Form1.Label142.Text = FpSpread1.ActiveSheet.Cells(i, 4).Text
Form1.Label148.Text = FpSpread1.ActiveSheet.Cells(i, 5).Text
Form1.TextBox35.Select()
Me.Close()
End Sub
このような感じになっております。
引用返信 編集キー/
■57033 / inTopicNo.5)  Re[4]: Form1からForm2へ
□投稿者/ ボールペン! (3回)-(2011/02/09(Wed) 14:09:19)
マサヤさん
>1.Form1が表示されています。
>2.Form2をForm1から開きます。
>3.Form2でテキストボックスに値を入力します。
>4.Form2を閉じます。
>5.Form1にForm2で入力した値が反映。
>やりたいことはこういうことですか?

そうです。

別の方法で回避できるならそれでもいいのですが・・・なにかないものでしょうか?
引用返信 編集キー/
■57039 / inTopicNo.6)  Re[4]: Form1からForm2へ
□投稿者/ shu (424回)-(2011/02/09(Wed) 14:43:59)
No57032 (ボールペン! さん) に返信

> Me.Close()
ここでブレークしたときに値が入っているということは閉じてからの
処理で再設定されているところはありませんでしょうか?

Form1に

Public FLG as Boolean = False



どれかのTextChangedイベントに
if Not FLG Then exit sub
MessageBox.Show(〜)
FLG = False
を記述して


Private Sub FpSpread1_CellDoubleClick の Me.Closeの手前で
Form1.FLG = True

として見てください。
もしメッセージが表示されたらステップ実行でどこで書き換えているか確認出来ます。



引用返信 編集キー/
■57044 / inTopicNo.7)  Re[5]: Form1からForm2へ
□投稿者/ ボールペン! (4回)-(2011/02/09(Wed) 16:44:32)
shuさん
>> Me.Close()
> ここでブレークしたときに値が入っているということは閉じてからの
> 処理で再設定されているところはありませんでしょうか?
>
> Form1に
>
> Public FLG as Boolean = False
>
> と
>
> どれかのTextChangedイベントに
> if Not FLG Then exit sub
> MessageBox.Show(〜)
> FLG = False
> を記述して
>
>
> Private Sub FpSpread1_CellDoubleClick の Me.Closeの手前で
> Form1.FLG = True
>
> として見てください。
> もしメッセージが表示されたらステップ実行でどこで書き換えているか確認出来ます。
>

Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
'クリックされたセルの番地からrowNOを取得
Dim i As Integer = FpSpread1.ActiveSheet.ActiveRowIndex

Form1.TextBox70.Text = FpSpread1.ActiveSheet.Cells(i, 0).Text
Form1.Label140.Text = FpSpread1.ActiveSheet.Cells(i, 1).Text
Form1.Label141.Text = FpSpread1.ActiveSheet.Cells(i, 2).Text
Form1.Label143.Text = FpSpread1.ActiveSheet.Cells(i, 3).Text
Form1.Label142.Text = FpSpread1.ActiveSheet.Cells(i, 4).Text
Form1.Label148.Text = FpSpread1.ActiveSheet.Cells(i, 5).Text
Form1.TextBox35.Select()
Me.Close()
End Sub

このコードで今日試してみると・・・すんなり受け渡しができました。

昨日はテキストボックスとラベル148しか受け渡しができてなかったのですが・・・

原因は分かりませんが現象が回避できたのでなんとかなりそうです。

ありがとうございまいた。


解決済み
引用返信 編集キー/
■57049 / inTopicNo.8)  Re[6]: Form1からForm2へ
□投稿者/ じゃんぬねっと (32回)-(2011/02/09(Wed) 19:41:52)
じゃんぬねっと さんの Web サイト
No57044 (ボールペン! さん) に返信
> Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
> 'クリックされたセルの番地からrowNOを取得
> Dim i As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
>
> Form1.TextBox70.Text = FpSpread1.ActiveSheet.Cells(i, 0).Text
> Form1.Label140.Text = FpSpread1.ActiveSheet.Cells(i, 1).Text
> Form1.Label141.Text = FpSpread1.ActiveSheet.Cells(i, 2).Text
> Form1.Label143.Text = FpSpread1.ActiveSheet.Cells(i, 3).Text
> Form1.Label142.Text = FpSpread1.ActiveSheet.Cells(i, 4).Text
> Form1.Label148.Text = FpSpread1.ActiveSheet.Cells(i, 5).Text
> Form1.TextBox35.Select()
> Me.Close()
> End Sub
>
> このコードで今日試してみると・・・すんなり受け渡しができました。
>
> 昨日はテキストボックスとラベル148しか受け渡しができてなかったのですが・・・
>
> 原因は分かりませんが現象が回避できたのでなんとかなりそうです。
>
> ありがとうございまいた。

FarPoint 社の Spread ですか... (日本での販売は GrapeCity さん)

Spread はいろいろと注意しなくてはならないことがあります。
まず、EnterCell 系のイベントおよび CellClick 系のイベントでフォーカスに影響があるコードは書かない方が良いです。

> Form1.TextBox35.Select()
> Me.Close()

なので、これはまずい動作の素になることがあります (Spread って '場合がある' 系の不具合が多いです)。
親 Form である Form1 が Form2 から値を参照して受け取るようにした方が良いですね。
Form1 から Form2 を開いているのであれば、閉じるタイミングも捕捉できますので... (親子関係的にもそれが理想かな)

ところで本トピックの内容とは無関係ですが、上記の CellDoubleClick イベントのコードは、
カラムヘッダでも反応しちゃうと思うのですが、良いのでしょうか? 違和感のある動きになりそうです。
解決済み
引用返信 編集キー/
■57069 / inTopicNo.9)  Re[7]: Form1からForm2へ
□投稿者/ ボールペン (1回)-(2011/02/10(Thu) 18:10:10)
じゃんぬれっとさん

>>Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
>>'クリックされたセルの番地からrowNOを取得
>>Dim i As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
>>
>>Form1.TextBox70.Text = FpSpread1.ActiveSheet.Cells(i, 0).Text
>>Form1.Label140.Text = FpSpread1.ActiveSheet.Cells(i, 1).Text
>>Form1.Label141.Text = FpSpread1.ActiveSheet.Cells(i, 2).Text
>>Form1.Label143.Text = FpSpread1.ActiveSheet.Cells(i, 3).Text
>>Form1.Label142.Text = FpSpread1.ActiveSheet.Cells(i, 4).Text
>>Form1.Label148.Text = FpSpread1.ActiveSheet.Cells(i, 5).Text
>>Form1.TextBox35.Select()
>>Me.Close()
>>End Sub
>>
>>このコードで今日試してみると・・・すんなり受け渡しができました。
>>
>>昨日はテキストボックスとラベル148しか受け渡しができてなかったのですが・・・
>>
>>原因は分かりませんが現象が回避できたのでなんとかなりそうです。
>>
>>ありがとうございまいた。
>
> FarPoint 社の Spread ですか... (日本での販売は GrapeCity さん)
>
> Spread はいろいろと注意しなくてはならないことがあります。
> まず、EnterCell 系のイベントおよび CellClick 系のイベントでフォーカスに影響があるコードは書かない方が良いです。
>
>>Form1.TextBox35.Select()
>>Me.Close()
>
> なので、これはまずい動作の素になることがあります (Spread って '場合がある' 系の不具合が多いです)。
> 親 Form である Form1 が Form2 から値を参照して受け取るようにした方が良いですね。
> Form1 から Form2 を開いているのであれば、閉じるタイミングも捕捉できますので... (親子関係的にもそれが理想かな)
>
> ところで本トピックの内容とは無関係ですが、上記の CellDoubleClick イベントのコードは、
> カラムヘッダでも反応しちゃうと思うのですが、良いのでしょうか? 違和感のある動きになりそうです。

見落としていましたorz

番地で-1がきた場合Exit Sub させるようにします。

スプレッドを使っている知り合いに聞いてそういう不具合が

あるのを知りました。

でも見た目も好きだし・・・機能面でもDataGuridViewより

かなり優れているのでなんとかしたいところです。

解決済みにもかかわらずご回答ありがとうございました。
引用返信 編集キー/
■57070 / inTopicNo.10)  Re[8]: Form1からForm2へ
□投稿者/ じゃんぬねっと (35回)-(2011/02/10(Thu) 19:00:17)
じゃんぬねっと さんの Web サイト
No57069 (ボールペン さん) に返信
> じゃんぬれっとさん

最近はこの手の間違われ方が多いみたい。(No56585)

# あらら、No. 表記だと一連ツリーで表示されないのねぇ。
# mode を al2 にすれば行けますが。

> 見落としていましたorz
> 番地で-1がきた場合Exit Sub させるようにします。

Row と Column の関係性としては番地っていうと違和感があるような。
ActiveRowIndex と ActiveColumnIndex のことですね。

> スプレッドを使っている知り合いに聞いてそういう不具合が
> あるのを知りました。
> でも見た目も好きだし・・・機能面でもDataGuridViewより
> かなり優れているのでなんとかしたいところです。

Spread は多くの機能を実装していますが、内部的には...(ry

DataGridView より高機能な Grid 系のコンポーネントは、FlexGrid、TrueDBGrid、MultiRow など無数にあります。
私は Spread を利用すべき場面は 「SheetView という概念が必要な時」 だと思います。
同じように 1 明細に複数行の Row を持つ場合は MultiRow、バウンド処理なら True DBGrid、
と言った具合いに使い分けることが賢明な選択だと考えます。

通常の場合は上記のような機能は必要ないことが多いため、軽くて堅牢な FlexGrid (DataGridView) を選択することが多いです。
引用返信 編集キー/
■57071 / inTopicNo.11)  Re[9]: Form1からForm2へ
□投稿者/ 魔界の仮面弁士 (2062回)-(2011/02/10(Thu) 20:39:38)
No57070 (じゃんぬねっと さん) に返信
> 最近はこの手の間違われ方が多いみたい。(No56585)

もしかして: No56606
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -