PCだい「ちゅき」

気がつけば庶事手伝い

目次

Blog 利用状況

ニュース

・H24/01/02
 Microsoft MVPを受賞しました
・H23/11/18
 MCTの憂鬱さんと相互リンクを張っていただきました^^
・H23/09/10
 プログラミング生放送でスピーカーさせていただきました^^ ・H22/12/18
 わんくま同盟でスピーカしました^^
さて、来年はどんな年になるかな。予想が当たるといいなぁ。
・H22/07/17
 わんくま同盟でスピーカしました^^
技術系のセッションは久しぶり。VB! VB!
・H22/03/13
 Tech FieldersでLTのスピーカしました^^
・H21/12/12
 わんくま同盟でスピーカしました^^
最近はずっとLT担当だったので、ちょっと新鮮でした^^
・H20/11/18
 Tech Fielders セミナー 大阪の
 Lightning Talkで優勝しました^^
・H20/8/23
 わんくま同盟で2回目のスピーカしちゃいました
 WCFと戯れてみました^^
・H20/5/17
 わんくま同盟でスピーカしちゃいました^^
 ちゃんとスピーカー持参しましたよんw
・H20/2/22
 なめ猫の参加証もらいました^^
・H20/1/22
 テンプレートを変えてみました^^
・H19/7/23
 ACEプログラムで、ナップサックをもらった上、工具セットももらえることになりました^^
・H19/1/11
 1が並ぶ縁起の良い日に投稿開始!。今後ともお付き合いよろしくお願いします
・H18/10/29
 参加させていただきました^^
ド・初心者ですがどうぞよろしくお願いします。

↓うーん、仕事しろ^^;
Chukiの脳内メーター

Chukiの脳内メーター

書庫

日記カテゴリ

ギャラリ

コミュニティ

相互リンク

【Love VB】 レッツWPF M-V-VM モデル with Visual Basic 2010 (VB10)

新年一発目は

新年一発目は、昨年からずっと書きたくて放ったらかしになっていたやっとVisual BasicでWPFを書く気がするようになる!!with Visual Basic 2010 の新機能を今更ながら書いてみます。
*新機能一覧のリンクは青柳さんのブログ

私が以前書いた元ネタ(【Love VB】 レッツWPF M-V-VM モデル )では、VBをdisりまくってます^^;
なぜならば、 複数行のラムダ式がなかったため、デリゲート部をそのままラムダ式にしていたC#用サンプルが単純なコピペでは利用しにくい問題があったからです。いちいちデリゲート先の関数を別途書くのがややこしくて面倒に感じたため、C#に浮気を....。これがようやっと出来るようになりました^^。でも、非常にキショい書き方になります。詳しくは本文
*元ネタの元ネタ:[WPF][C#]Model View ViewModelパターンでハローワールド (かずきさんのBlog)
http://blogs.wankuma.com/kazuki/archive/2009/02/23/168586.aspx

本投稿では、Visual Basic 2010(以下VB10)の新機能(MSDN)のうち以下の3つを扱います
複数行のラムダ式(これで、やっと.NET 3.0以降をVBで書く気がしてきました^^)
自動実装プロパティ(プロパティなんてPublicでイイじゃん?文化から脱却する時がきました)
暗黙的な行継続(微妙に制約があってわけワカメ。業務上の記述標準ではLINQ以外スルーの予定^^;)

では、早速作っていきます。従来と同じところは基本的にコピペの方向で(手抜きじゃないよw)
【お約束】Visual Studio 2010のβ2を使用しています。製品版ではもっと良くなってると思われます。予めご了承ください。


「VB 10で作るM-V-VMモデルなHello World^^」

1、WPFMVVMHelloWorldという名前でWPFアプリケーション(当然VB!)を作成

2、新規クラス「DelegateCommand」を作ってコピペ

暗黙的な行継続のおかけで、仮引数宣言部や代入部などのアンスコをいれた改行部分では、アンスコを脱がしてやらないとコンパイラが「識別子が必要です。」なんてご機嫌ナナメになってしまいました。曖昧さがないと公知出来る部分はアンスコなしでOKになりました^^
できるだけ外しくなるVBの気持ちは男としてよく分かるが、Hentaiっぽくてキショい。
(*要編集だったのは、元ネタのHTML<br>が改行されなかった模様^^;)

【例】
●VB9
AddHandler(ByVal value As EventHandler)
 
Me._CanExecuteChanged = _
    CType(System.Delegate.Combine(Me._CanExecuteChanged, value), EventHandler)
  AddHandler     CommandManager.RequerySuggested,
Me._CanExecuteChanged
End
AddHandler


●VB10アンスコがひん曲げられて、脱がせて真下へ移動させろとうるさいorz)
 

カスタムイベントの文法がウザイのはVB10になっても相変わらず><
*デレゲートやイベントまわりの美しさはC#に敵わんorz

3、Model(新規クラス「Person」)の作成

自動実装プロパティで楽々^^。(Publicでいいんじゃね?とかはもう無しの方向でw)

【例】
●VB9

Public Class Person
 Private _name As String
 Public Property Name() As String
 
 Get
  
  Return _name
   End Get
   Set
(ByVal value As String)
     _name = value
   End Set
 
End Property
End
Class

 ●VB10(自動実装プロパティでウザい下駄・雪駄から開放^^)

Public Class Person
 Property Name AsStringPublicつけなくてもパブリックのスコープを持ちます
End Class

4、ViewModelの作成

複数行のラムダ式で、やっとC#のサンプルを文法の置換えでVBから利用できるようになりました^^
引っかかった点として、あくまでも「複数行」のラムダ式なので、一行で書いた場合は従来通り「式」として扱われることです。ステートメントとして扱いたい場合は単一行のサブルーチン形式で記述します。詳しくは続編をご覧下さい(2010/1/7追記)

【例】
●VB9(従来ラムダ式内は式のみでステートメントが書けないため、別途メッソドを作成)
Public ReadOnly Property CreateMessageCommand() As ICommand
  Get ' 作成済みなら、それを返す
 
  If Not IsNothing(_createMessageCommand) Then Return _createMessageCommand
   ' 遅延初期化 ' 今回は、処理が単純なのでラムダ式で全部書いたが、通常は ' ViewModel内の別メソッドとして定義する。
   'VBでもラムダ式で...ぼけ、かす、あほ(やばい、VBへの愛が...

  'Function式なので、なにがしかの戻り値が必要。んでもって...。
  'Me.Message = string.Format("こんにちは{0}さん", Me.Name) 'ラムダ式では、これは代入じゃなくて比較を意味するんですねこのくそボケは(使えんorz)
  '心の叫び誰か「てめぇの書き方が間違ってる!!」ってdisってぇ(できればメガネ女子)
    _createMessageCommand = New DelegateCommand( _
       AddressOf updateMessage, _
      Function(param) String.IsNullOrEmpty(CType(Me, IDataErrorInfo)("Name")))
   Return _createMessageCommand
  End Get
End
Property
 '諦めてメソッド作りましょうorz
Private
Sub updateMessage()
 Me.Message = String.Format("こんにちは{0}さん", Me.Name)
End Sub


●VB10(ステートメントにしたければ、何故か改行してEnd Functionまで書かないとダメ)
*以下の太字斜体部のように1行で書いてもコンパイルエラーはでないが動きません。

■動かなくて悩んだ例(コンパイル時にエラーは出ません。従来通り式として扱われます)
  'VBでもラムダ式で...書けます^^

   _createMessageCommand = New DelegateCommand(
     Function(param) Me.Message = String.Format("こんにちは{0}さん", Me.Name),
     Function(param) String.IsNullOrEmpty(CType(Me, IDataErrorInfo)("Name")))

■動いた^^(でも、そのままではFunction"<匿名メソッド>"に戻り値がない、と警告が出ます。キショいorz)
ということで、Return Nothing入れるなど。または単一行のサブルーチン形式で記述します詳しくは続編をご覧下さい(2010/1/7追記)
    Public ReadOnly Property CreateMessageCommand() As ICommand
        Get
            ' 作成済みなら、それを返す   
            If Not IsNothing(_createMessageCommand) Then Return _createMessageCommand
            ' 遅延初期化   
            ' 今回は、処理が単純なのでラムダ式で全部書いたが、通常は   
            ' ViewModel内の別メソッドとして定義する。   
            'VBでもラムダ式で...出来ます^^
            _createMessageCommand = New DelegateCommand( 
                Function(param)
                   Me.Message = String.Format("こんにちは{0}さん", Me.Name)
			Return Nothing
             End Function,
                Function(param) String.IsNullOrEmpty(CType(Me, IDataErrorInfo)("Name")))
            Return _createMessageCommand
        End Get
    End Property

5、View(UserControlクラス「HelloWorldView」)の作成

相変わらず、デフォルトではVBでは頭に既定の名前空間が勝手につくので、C#のサンプルなどから貼りつけるときは既定の名前空間を外してコピペしてください。

6、ViewとViewModelの結合

●Application.xamlのコピペ(ビルドしないと、クラスが見つからないといわれます)
●MainWindow.xamlのコピペ
*プロジェクト作成時にできるWindowのクラス名がWindow1からMainWindowに変わっています。
xaml内のクラス指定もWindow1からMainWindowに変更してください
(MainWindowだなんてSilverlightの影響!?)

7、仕上げ

Application.xaml.vbをコピペして終わり^^

*IDEのイベント作成機能を使うと、宣言後ろにHandlesが付きます。これをつけっぱなしにしていると、XAMLで定義したものと2回呼ばれてしまいますので、Handlesを外しましょう。

8、実行

応答なしでプロジェクトがぶっ飛ぶ前にセーブしましょう^^;
セーブ前にぶっ飛んでも、以下のディレクトリに残ってるかもしれません。
%UserProfile%\AppData\Local\Temporary Projects

投稿日時 : 2010年1月4日 15:10

Feedback

# re: 【Love VB】 レッツWPF M-V-VM モデル with Visual Basic 2010 (VB10) 2010/01/06 18:11 すー

こんばんは
気づいたことコメントさせていただきます。

>*以下の太字斜体部のように1行で書いてもコンパイルエラーはでないが動きません。
>Function(param) Me.Message = String.Format("こんにちは{0}さん", Me.Name)

この場合、代入ではなく比較になってるんじゃないですか?
その比較結果が Function(param) の戻り値になってると思います。
たぶん、期待されてる動作をしていないだけで、
書かれた通りには動作してるんだと思います。

>ということで、Return Nothing入れるなど。

ラムダ式には Sub もあるようなので、
Function(param)/End Function じゃなくて、
Sub(param)/End Sub にすればよくないですか?

# 【Love VB】Visual Basic 2010で使いやくすくなったラムダ式 2010/01/06 22:31 PCだいちゅき

【Love VB】Visual Basic 2010で使いやくすくなったラムダ式

# re: 【Love VB】 レッツWPF M-V-VM モデル with Visual Basic 2010 (VB10) 2010/01/06 23:08 ちゅき

すーさんコメントありがとうございます。

>この場合、代入ではなく比較になってるんじゃないですか?

はい、その通りです。従来通り、式として扱われるようです。
そりゃいきなり互換性がなくなったら大変ですね^^;

>ラムダ式には Sub もあるようなので
正直盲点でした。匿名Functionほげほげなどというエラーがでるので、Functionしかないんだと思っていました。

検証したところ、すごいキショい動きをするため別エントリに記載しました。

ありがとうございましたm(_ _)m

# where can i get doxycycline https://doxycyline1st.com/
online doxycycline 2022/02/26 0:12 Jusidkid

where can i get doxycycline https://doxycyline1st.com/
online doxycycline

# clomid purchase http://clomidfast.site/ 2022/04/12 12:29 Clomids

clomid purchase http://clomidfast.site/

# buy generic prednisone online http://prednisonefast.site/ 2022/04/16 22:24 Prednisone

buy generic prednisone online http://prednisonefast.site/

# lasix furosemide 40 mg https://buylasix.icu/
furosemide 2022/06/24 16:42 LasixRx

lasix furosemide 40 mg https://buylasix.icu/
furosemide

# clomid purchase online https://clomidonline.icu/ 2022/07/08 13:10 Clomidj

clomid purchase online https://clomidonline.icu/

# stromectol france https://stromectolbestprice.com/ 2022/07/30 0:04 BestPrice

stromectol france https://stromectolbestprice.com/

# prednisone 10mg tablet price https://deltasone.icu/
prednisone 2 5 mg 2022/08/22 9:18 Prednisone

prednisone 10mg tablet price https://deltasone.icu/
prednisone 2 5 mg

# ed pills online https://ed-pills.xyz/
ed meds online 2022/09/16 7:10 EdPills

ed pills online https://ed-pills.xyz/
ed meds online

# best treatment for ed https://ed-pills.xyz/
best non prescription ed pills 2022/09/17 19:30 EdPills

best treatment for ed https://ed-pills.xyz/
best non prescription ed pills

# doxycycline hyclate https://buydoxycycline.icu/ 2022/10/08 11:41 Doxycycline

doxycycline hyclate https://buydoxycycline.icu/

# prednisone for dogs https://prednisonepills.site/
prednisone 50 mg price 2022/11/30 0:34 Prednisone

prednisone for dogs https://prednisonepills.site/
prednisone 50 mg price

# ed pills that work https://cheapestedpills.com/
generic ed pills 2022/12/10 16:14 CheapPills

ed pills that work https://cheapestedpills.com/
generic ed pills

# drug information and news for professionals and consumers. Actual trends of drug.
https://canadianfast.com/
Get here. Get warning information here. 2023/02/20 5:42 CanadaBest

drug information and news for professionals and consumers. Actual trends of drug.
https://canadianfast.com/
Get here. Get warning information here.

# Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина. Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне. Женщины именно такого типа имеют довольно большой успех у противоположного пола, так 2023/03/28 15:31 Любовь женщины к себе сравнима с любовью, которую

Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина.
Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне.
Женщины именно такого типа имеют довольно большой успех у противоположного пола, так как в большинстве
случаев, мужчины отказываются от собственного нарциссизма и испытывают
потребность в любви к объекту.

5 способов вернуть интерес к работе и увлечениям

# Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина. Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне. Женщины именно такого типа имеют довольно большой успех у противоположного пола, так 2023/03/28 15:31 Любовь женщины к себе сравнима с любовью, которую

Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина.
Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне.
Женщины именно такого типа имеют довольно большой успех у противоположного пола, так как в большинстве
случаев, мужчины отказываются от собственного нарциссизма и испытывают
потребность в любви к объекту.

5 способов вернуть интерес к работе и увлечениям

# Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина. Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне. Женщины именно такого типа имеют довольно большой успех у противоположного пола, так 2023/03/28 15:31 Любовь женщины к себе сравнима с любовью, которую

Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина.
Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне.
Женщины именно такого типа имеют довольно большой успех у противоположного пола, так как в большинстве
случаев, мужчины отказываются от собственного нарциссизма и испытывают
потребность в любви к объекту.

5 способов вернуть интерес к работе и увлечениям

# Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина. Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне. Женщины именно такого типа имеют довольно большой успех у противоположного пола, так 2023/03/28 15:32 Любовь женщины к себе сравнима с любовью, которую

Любовь женщины к себе сравнима с любовью, которую испытывает к ней мужчина.
Она вполне может быть удовлетворена отношениями, в которых чувство направлено односторонне.
Женщины именно такого типа имеют довольно большой успех у противоположного пола, так как в большинстве
случаев, мужчины отказываются от собственного нарциссизма и испытывают
потребность в любви к объекту.

5 способов вернуть интерес к работе и увлечениям

# Возвращаясь к спору о том, как лучше: чтобы государя любили или чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся – по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что зависит от него, 2023/03/28 15:32 Возвращаясь к спору о том, как лучше: чтобы госуд

Возвращаясь к спору о том, как
лучше: чтобы государя любили или
чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся
? по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что
зависит от него, а не от кого-то
другого. Как продавать

# Возвращаясь к спору о том, как лучше: чтобы государя любили или чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся – по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что зависит от него, 2023/03/28 15:32 Возвращаясь к спору о том, как лучше: чтобы госуд

Возвращаясь к спору о том, как
лучше: чтобы государя любили или
чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся
? по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что
зависит от него, а не от кого-то
другого. Как продавать

# Возвращаясь к спору о том, как лучше: чтобы государя любили или чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся – по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что зависит от него, 2023/03/28 15:33 Возвращаясь к спору о том, как лучше: чтобы госуд

Возвращаясь к спору о том, как
лучше: чтобы государя любили или
чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся
? по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что
зависит от него, а не от кого-то
другого. Как продавать

# Возвращаясь к спору о том, как лучше: чтобы государя любили или чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся – по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что зависит от него, 2023/03/28 15:33 Возвращаясь к спору о том, как лучше: чтобы госуд

Возвращаясь к спору о том, как
лучше: чтобы государя любили или
чтобы его боялись, скажу только, что государей любят по собственному усмотрению, а боятся
? по усмотрению государей, поэтому мудрому государю нужно рассчитывать на то, что
зависит от него, а не от кого-то
другого. Как продавать

# Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике. Одно из них создает у пациента напряжение, так как он прилагает немалые усилия, чтобы вспомнить забыто 2023/03/28 17:26 Помогая пациенту вернуть вытесненное механизмом пс

Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике.
Одно из них создает у пациента
напряжение, так как он прилагает немалые усилия, чтобы вспомнить забытое,
другое ? направлено на то, чтобы вытесненное не
возвратилось снова в сознание.
Борьба же между этими стремлениями может породить
в сознании выдуманное,
искаженное событие. Как вернуть интерес к жизни в любом возрасте

# Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике. Одно из них создает у пациента напряжение, так как он прилагает немалые усилия, чтобы вспомнить забыто 2023/03/28 17:26 Помогая пациенту вернуть вытесненное механизмом пс

Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике.
Одно из них создает у пациента
напряжение, так как он прилагает немалые усилия, чтобы вспомнить забытое,
другое ? направлено на то, чтобы вытесненное не
возвратилось снова в сознание.
Борьба же между этими стремлениями может породить
в сознании выдуманное,
искаженное событие. Как вернуть интерес к жизни в любом возрасте

# Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике. Одно из них создает у пациента напряжение, так как он прилагает немалые усилия, чтобы вспомнить забыто 2023/03/28 17:26 Помогая пациенту вернуть вытесненное механизмом пс

Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике.
Одно из них создает у пациента
напряжение, так как он прилагает немалые усилия, чтобы вспомнить забытое,
другое ? направлено на то, чтобы вытесненное не
возвратилось снова в сознание.
Борьба же между этими стремлениями может породить
в сознании выдуманное,
искаженное событие. Как вернуть интерес к жизни в любом возрасте

# Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике. Одно из них создает у пациента напряжение, так как он прилагает немалые усилия, чтобы вспомнить забыто 2023/03/28 17:26 Помогая пациенту вернуть вытесненное механизмом пс

Помогая пациенту вернуть вытесненное механизмом психологической защиты воспоминание, мы сталкиваемся с двумя противоположными стремлениями в психике.
Одно из них создает у пациента
напряжение, так как он прилагает немалые усилия, чтобы вспомнить забытое,
другое ? направлено на то, чтобы вытесненное не
возвратилось снова в сознание.
Борьба же между этими стремлениями может породить
в сознании выдуманное,
искаженное событие. Как вернуть интерес к жизни в любом возрасте

# Интересна одна из особенностей нашей памяти. Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события. Это объясняется тем, что они замещают события, которые были вытеснены психическим механизмом защиты и име 2023/03/28 17:47 Интересна одна из особенностей нашей памяти. Очень

Интересна одна из особенностей нашей памяти.
Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события.
Это объясняется тем, что они замещают события,
которые были вытеснены психическим механизмом защиты и имеют с ними ассоциативную связь.

Такие воспоминания можно
назвать покрывающими
воспоминаниями. не продавая?

# Интересна одна из особенностей нашей памяти. Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события. Это объясняется тем, что они замещают события, которые были вытеснены психическим механизмом защиты и име 2023/03/28 17:48 Интересна одна из особенностей нашей памяти. Очень

Интересна одна из особенностей нашей памяти.
Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события.
Это объясняется тем, что они замещают события,
которые были вытеснены психическим механизмом защиты и имеют с ними ассоциативную связь.

Такие воспоминания можно
назвать покрывающими
воспоминаниями. не продавая?

# Интересна одна из особенностей нашей памяти. Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события. Это объясняется тем, что они замещают события, которые были вытеснены психическим механизмом защиты и име 2023/03/28 17:48 Интересна одна из особенностей нашей памяти. Очень

Интересна одна из особенностей нашей памяти.
Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события.
Это объясняется тем, что они замещают события,
которые были вытеснены психическим механизмом защиты и имеют с ними ассоциативную связь.

Такие воспоминания можно
назвать покрывающими
воспоминаниями. не продавая?

# Интересна одна из особенностей нашей памяти. Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события. Это объясняется тем, что они замещают события, которые были вытеснены психическим механизмом защиты и име 2023/03/28 17:48 Интересна одна из особенностей нашей памяти. Очень

Интересна одна из особенностей нашей памяти.
Очень часто из далекого детства в памяти сохраняются лишь обыденные, ничем не примечательные события.
Это объясняется тем, что они замещают события,
которые были вытеснены психическим механизмом защиты и имеют с ними ассоциативную связь.

Такие воспоминания можно
назвать покрывающими
воспоминаниями. не продавая?

# doxycycline 50 mg - https://doxycyclinesale.pro/# 2023/04/21 17:21 Doxycycline

doxycycline 50 mg - https://doxycyclinesale.pro/#

# where can i get prednisone over the counter - https://prednisonesale.pro/# 2023/04/22 4:38 Prednisone

where can i get prednisone over the counter - https://prednisonesale.pro/#

# walgreens sleep aids over the counter https://overthecounter.pro/# 2023/05/08 23:06 OtcJikoliuj

walgreens sleep aids over the counter https://overthecounter.pro/#

# paxlovid cost without insurance https://paxlovid.life/# paxlovid generic 2023/07/25 20:33 Paxlovid

paxlovid cost without insurance https://paxlovid.life/# paxlovid generic

# doxycycline 150 mg https://doxycycline.forum/ price of doxycycline 2023/11/25 13:27 Doxycycline

doxycycline 150 mg https://doxycycline.forum/ price of doxycycline

# farmacia online migliore https://farmaciait.pro/ comprare farmaci online all'estero 2023/12/04 10:22 Farmacia

farmacia online migliore https://farmaciait.pro/ comprare farmaci online all'estero

タイトル
名前
Url
コメント