<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4000441878577059496</id><updated>2012-02-16T17:58:54.670+09:00</updated><category term='VB.NET'/><category term='Silverlight4'/><title type='text'>暮れなずむ開発者のメモ</title><subtitle type='html'>プログラム開発を行っていて、気づいたコードやノウハウを記録します</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-7489769044675823502</id><published>2012-01-29T00:15:00.003+09:00</published><updated>2012-01-29T00:20:41.964+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight4'/><title type='text'>TextBlock にClipboardへのコピー機能を追加する(改訂版)</title><content type='html'>前回投稿した「&lt;a href="http://kcodememo.blogspot.com/2012/01/textblock-clipboard.html" target="_blank"&gt;TextBlock にClipboardへのコピー機能を追加する&lt;/a&gt;」ですが、&lt;br /&gt;あのコードだと、&lt;b&gt;メモリーは消費する&lt;/b&gt;わ、&lt;b&gt;メモリーリークしまくる&lt;/b&gt;わで使えないことがわかりました。&lt;br /&gt;ここに、改良版を投稿します&lt;br /&gt;&lt;ol&gt;&lt;li&gt;メモリーリークの問題&lt;br /&gt;右クリックで表示しているContextMenuですが、その右クリックを監視している ContextMenuService自体がメモリーリークを起こしているみたいで、OwnerのTextblockが破棄されれもContextMenuServiceに設定されたContextMenuは残っているみたいです。&lt;/li&gt;&lt;li&gt;メモリーの消費&lt;br /&gt;コードを読めばわかると思いますが、TextBlockの配下にContextMenuServiceとContextMenu、その下にMenuItemが作成されます。これらの生成されたインスタンス「TextBlockClipBoardService.ID=""」によって、すべてのTextBlockの子となるので、メモリーの消費量がタダモンではありません。&lt;br /&gt;&lt;br /&gt;（実際、設定されたTextBlockをDataGridのCellTempleteに設定したらスクロールが耐えられないほどカクカク）&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;対応策として&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;なるべく生成するインスタンスを少なくする&lt;br /&gt;ContextMenuService&amp;nbsp;は諦め、シングルトンのPopupオブジェクトを表示する&lt;/li&gt;&lt;li&gt;メモリーリークをなくす&lt;br /&gt;循環参照を撲滅する。&lt;/li&gt;&lt;/ol&gt;観点に再作成しました。&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;で、できたコードは次の通り&lt;br /&gt;MainPage.xaml&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;&amp;lt;UserControl  x:Class="TextBlockClipboard.MainPage"&lt;br /&gt;             xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" &lt;br /&gt;             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt;             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt;             xmlns:my="clr-namespace:TextBlockClipboard"&lt;br /&gt;             mc:Ignorable="d"&lt;br /&gt;             d:DesignHeight="200" d:DesignWidth="200"        &amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid&amp;gt;&lt;br /&gt;        &amp;lt;StackPanel&amp;gt;&lt;br /&gt;            &amp;lt;TextBlock Text="TextBlock123456" my:TextBlockClipBoardService.ID=""/&amp;gt;&lt;br /&gt;            &amp;lt;TextBlock Text="あああああああああ" my:TextBlockClipBoardService.ID="" /&amp;gt;&lt;br /&gt;        &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;TextBlockClipboard.cs&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;using System;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Controls;&lt;br /&gt;using System.Windows.Controls.Primitives;&lt;br /&gt;using System.Windows.Media;&lt;br /&gt;using System.Windows.Media.Effects;&lt;br /&gt;using System.Windows.Media.Imaging;&lt;br /&gt;&lt;br /&gt;namespace TextBlockClipboard&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// TextBlock の Text 文字列を Clipboard へ コピーするサービス&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    public static class TextBlockClipBoardService&lt;br /&gt;    {&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID 添付プロパティ&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static readonly DependencyProperty IDProperty =&lt;br /&gt;            DependencyProperty.RegisterAttached("ID",&lt;br /&gt;                                                typeof(string),&lt;br /&gt;                                                typeof(TextBlockClipBoardService),&lt;br /&gt;                                                new PropertyMetadata(null, IDPropertyChanged));&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID設定&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static void SetID(DependencyObject obj, string value)&lt;br /&gt;        {&lt;br /&gt;            obj.SetValue(IDProperty, value);&lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID取得&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static string GetID (DependencyObject obj)&lt;br /&gt;        {&lt;br /&gt;            return (string)obj.GetValue(IDProperty);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ポップアップ&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        private static Popup RightPopupMenu = null;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ポップアップに表示するTextBlock&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        private static TextBlock PopupTextBlock = null;&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// Popup 作成&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;returns&amp;gt;Popup&amp;lt;/returns&amp;gt;&lt;br /&gt;        private static Popup CreatePopupMenu()&lt;br /&gt;        {&lt;br /&gt;            PopupTextBlock = new TextBlock();&lt;br /&gt;            PopupTextBlock.FontSize = 12;&lt;br /&gt;            PopupTextBlock.Padding = new Thickness(5, 2, 5, 2);&lt;br /&gt;&lt;br /&gt;            var border = new Border();&lt;br /&gt;            border.BorderThickness = new Thickness(1);&lt;br /&gt;            border.CornerRadius = new CornerRadius(5);&lt;br /&gt;            border.BorderBrush = new SolidColorBrush(Colors.Black);&lt;br /&gt;            border.Background = new SolidColorBrush(SystemColors.MenuColor);&lt;br /&gt;            border.Child = PopupTextBlock;&lt;br /&gt;&lt;br /&gt;            var grid = new Grid();&lt;br /&gt;            grid.Effect = new DropShadowEffect { Opacity = 0.4 };&lt;br /&gt;            grid.Children.Add(border);&lt;br /&gt;            var popup = new Popup();&lt;br /&gt;            popup.Child = grid;&lt;br /&gt;&lt;br /&gt;            popup.Opened += (s, e) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    Popup localPopup = (Popup)s;&lt;br /&gt;                    var text = (string)localPopup.Tag;&lt;br /&gt;                    if (text.Length &amp;gt; 30)&lt;br /&gt;                    {&lt;br /&gt;                        text = text.Substring(0, 30) + " ... ";&lt;br /&gt;                    }&lt;br /&gt;                    PopupTextBlock.Text = "「" + text + "」をコピーします";&lt;br /&gt;                };&lt;br /&gt;            PopupTextBlock.MouseLeftButtonUp += (s, e) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    try&lt;br /&gt;                    {&lt;br /&gt;                        Clipboard.SetText((string)popup.Tag);&lt;br /&gt;                    }&lt;br /&gt;                    catch (System.Security.SecurityException)&lt;br /&gt;                    {&lt;br /&gt;                    }&lt;br /&gt;                    popup.IsOpen = false;&lt;br /&gt;                    e.Handled = true;&lt;br /&gt;                };&lt;br /&gt;            PopupTextBlock.MouseLeave += (s, e) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    popup.IsOpen = false;&lt;br /&gt;                };&lt;br /&gt;&lt;br /&gt;            return popup;&lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID設定(TextBlockに仕掛けを設定)&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="d"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        private static void IDPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            var uiTextBlock = d as TextBlock;&lt;br /&gt;            if (uiTextBlock != null)&lt;br /&gt;            {&lt;br /&gt;                if (null == RightPopupMenu)&lt;br /&gt;                {&lt;br /&gt;                    RightPopupMenu = CreatePopupMenu();&lt;br /&gt;                }&lt;br /&gt;                uiTextBlock.MouseRightButtonDown += (sender, ea) =&amp;gt;&lt;br /&gt;                    {&lt;br /&gt;                        RightPopupMenu.IsOpen = false;&lt;br /&gt;                        ea.Handled = true;&lt;br /&gt;                    };&lt;br /&gt;                uiTextBlock.MouseRightButtonUp += (sender,ea) =&amp;gt;&lt;br /&gt;                    {&lt;br /&gt;                        // 表示位置はカーソルがPopupの中へ入るように&lt;br /&gt;                        RightPopupMenu.HorizontalOffset = ea.GetPosition(null).X - 50.0;&lt;br /&gt;                        RightPopupMenu.VerticalOffset = ea.GetPosition(null).Y - 5.0;&lt;br /&gt;&lt;br /&gt;                        TextBlock tb = (TextBlock)sender;&lt;br /&gt;                        RightPopupMenu.Tag = tb.Text;&lt;br /&gt;                        RightPopupMenu.IsOpen = true;&lt;br /&gt;                        ea.Handled = true;&lt;br /&gt;                    };&lt;br /&gt;                uiTextBlock.MouseLeftButtonUp += (sender,ea) =&amp;gt;&lt;br /&gt;                    {&lt;br /&gt;                        RightPopupMenu.IsOpen = false;&lt;br /&gt;                    };&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                throw new InvalidProgramException("TextBlockClipBoardService は TextBlock のみサポートしてます");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;画面はこんな感じ&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZVStOpYKep0/TyQOG450t9I/AAAAAAAAAGY/F_vPKeAD0SY/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZVStOpYKep0/TyQOG450t9I/AAAAAAAAAGY/F_vPKeAD0SY/s1600/0.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;プロジェクト:&lt;a href="https://skydrive.live.com/redir.aspx?cid=70ead63c776f3feb&amp;amp;resid=70EAD63C776F3FEB!133&amp;amp;parid=70EAD63C776F3FEB!131&amp;amp;authkey=!ACh9HsJ5QfF1ClQ" target="_blank"&gt;TextBlockClipboard2.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-7489769044675823502?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/7489769044675823502/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2012/01/textblock-clipboard_29.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7489769044675823502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7489769044675823502'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2012/01/textblock-clipboard_29.html' title='TextBlock にClipboardへのコピー機能を追加する(改訂版)'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ZVStOpYKep0/TyQOG450t9I/AAAAAAAAAGY/F_vPKeAD0SY/s72-c/0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-6483588425456810853</id><published>2012-01-27T01:46:00.000+09:00</published><updated>2012-01-29T00:19:35.435+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight4'/><title type='text'>TextBlock に Clipboard へのコピー機能を追加する</title><content type='html'>2011/01/29 追記&lt;br /&gt;この方法は、不具合がありました。改訂版は「&lt;a href="http://kcodememo.blogspot.com/2012/01/textblock-clipboard_29.html" target="_blank"&gt;TextBlock に Clipboard へのコピー機能を追加する(改訂版)&lt;/a&gt;」で紹介してます。&lt;br /&gt;&lt;br /&gt;とあるお客さんで 「TextBlock に表示している文字列を他のアプリへコピーしたいんだけど...」と要求がありました。&lt;br /&gt;Silverlightで作成したプログラムはすでに完成間近。&lt;br /&gt;&lt;br /&gt;手間がかからず、短期間で実装したコードを紹介する。&lt;br /&gt;&lt;br /&gt;操作は、TextBlockのテキストを右クリックすると、コンテキストメニューが表示され、メニューを選択すると、クリップボードへコピーする。&lt;br /&gt;&lt;br /&gt;参考URL:&lt;a href="http://d.hatena.ne.jp/griefworker/20100611/silverlight_contextmenu" target="_blank"&gt;Silverlight で ContextMenu を使ってみる&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;TextBlockで右クリック&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-4xxtSEETG6c/TyF-SXPEsxI/AAAAAAAAAGE/MW4WQOpiEmw/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="105" src="http://1.bp.blogspot.com/-4xxtSEETG6c/TyF-SXPEsxI/AAAAAAAAAGE/MW4WQOpiEmw/s320/1.png" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;選択すると&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-6I18JOHY0P0/TyF-nPrI9DI/AAAAAAAAAGM/BvtI0axzfZk/s1600/WS000001.JPG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://4.bp.blogspot.com/-6I18JOHY0P0/TyF-nPrI9DI/AAAAAAAAAGM/BvtI0axzfZk/s320/WS000001.JPG" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MainPage.xamlは&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;&amp;lt;UserControl  x:Class="TextBlockClipboard.MainPage"&lt;br /&gt;             xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" &lt;br /&gt;             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt;             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt;             xmlns:my="clr-namespace:TextBlockClipboard"&lt;br /&gt;             mc:Ignorable="d"&lt;br /&gt;             d:DesignHeight="200" d:DesignWidth="200"        &amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid&amp;gt;&lt;br /&gt;        &amp;lt;StackPanel&amp;gt;&lt;br /&gt;            &amp;lt;TextBlock Text="TextBlock123456" my:TextBlockClipBoardService.ID=""/&amp;gt;&lt;br /&gt;            &amp;lt;TextBlock Text="あああああああああ" my:TextBlockClipBoardService.ID="" /&amp;gt;&lt;br /&gt;        &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;TextBlockClipBoardService.cs は&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;using System;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Controls;&lt;br /&gt;using System.Windows.Media.Imaging;&lt;br /&gt;&lt;br /&gt;namespace TextBlockClipboard&lt;br /&gt;{&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// TextBlock の Text 文字列を Clipboard へ コピーするサービス&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    public static class TextBlockClipBoardService&lt;br /&gt;    {&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID 添付プロパティ&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static readonly DependencyProperty IDProperty =&lt;br /&gt;            DependencyProperty.RegisterAttached("ID",&lt;br /&gt;                                                typeof(string),&lt;br /&gt;                                                typeof(TextBlockClipBoardService),&lt;br /&gt;                                                new PropertyMetadata(null, IDPropertyChanged));&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID設定&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static void SetID(DependencyObject obj, string value)&lt;br /&gt;        {&lt;br /&gt;            obj.SetValue(IDProperty, value);&lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID取得&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public static string GetID (DependencyObject obj)&lt;br /&gt;        {&lt;br /&gt;            return (string)obj.GetValue(IDProperty);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ID設定(TextBlockに仕掛けを設定)&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="d"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        private static void IDPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            var uiTextBlock = d as TextBlock;&lt;br /&gt;            if (uiTextBlock != null)&lt;br /&gt;            {&lt;br /&gt;                // TextBlockなら&lt;br /&gt;                ContextMenu menu = new ContextMenu();&lt;br /&gt;                MenuItem menuItem = new MenuItem();&lt;br /&gt;                var img = new Image { Source =  new BitmapImage(new Uri("notecheck32.png", UriKind.RelativeOrAbsolute)) };&lt;br /&gt;                img.Height = 16;&lt;br /&gt;                menuItem.Icon = img;&lt;br /&gt;                menuItem.Click += (menuItemSender, _) =&amp;gt;&lt;br /&gt;                    {&lt;br /&gt;                        // メニューを選択した&lt;br /&gt;                        MenuItem localMenuItem = (MenuItem)menuItemSender;&lt;br /&gt;                        try&lt;br /&gt;                        {&lt;br /&gt;                            Clipboard.SetText((string)localMenuItem.Tag);&lt;br /&gt;                        }&lt;br /&gt;                        catch (System.Security.SecurityException)&lt;br /&gt;                        {&lt;br /&gt;                        }&lt;br /&gt;                    };&lt;br /&gt;                menu.Tag = new WeakReference(uiTextBlock, false);&lt;br /&gt;                menu.Items.Add(menuItem);&lt;br /&gt;                menu.Opened += (menuOpendSender, _) =&amp;gt;&lt;br /&gt;                    {&lt;br /&gt;                        // 左クリックしてメニューが開いた&lt;br /&gt;                        ContextMenu localMenu = (ContextMenu)menuOpendSender;&lt;br /&gt;                        MenuItem localMenuItem = (MenuItem)localMenu.Items[0];&lt;br /&gt;                        var localTextBlock = (TextBlock)((WeakReference)localMenu.Tag).Target;&lt;br /&gt;                        localMenuItem.Header = "「" + localTextBlock.Text + "」をコピーします";&lt;br /&gt;                        localMenuItem.Tag = localTextBlock.Text;&lt;br /&gt;                    };&lt;br /&gt;                ContextMenuService.SetContextMenu(uiTextBlock, menu);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                throw new InvalidProgramException("TextBlockClipBoardService は TextBlock のみサポートしてます");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ミソは、65行目でWeakReferenceを使って、相互参照地獄から逃れています。&lt;br /&gt;&lt;br /&gt;プロジェクトファイル:&lt;a href="https://skydrive.live.com/redir.aspx?cid=70ead63c776f3feb&amp;amp;resid=70EAD63C776F3FEB!132&amp;amp;parid=70EAD63C776F3FEB!131&amp;amp;authkey=!AN-3Z3s_dLZnW5U" target="_blank"&gt;TextBlockClipboard.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-6483588425456810853?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/6483588425456810853/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2012/01/textblock-clipboard.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6483588425456810853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6483588425456810853'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2012/01/textblock-clipboard.html' title='TextBlock に Clipboard へのコピー機能を追加する'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-4xxtSEETG6c/TyF-SXPEsxI/AAAAAAAAAGE/MW4WQOpiEmw/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-7866276804086639954</id><published>2011-10-22T18:46:00.001+09:00</published><updated>2011-10-22T19:04:52.749+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight4'/><title type='text'>Silverlight4で分離ストレージへ保存</title><content type='html'>Silverlight4で分離ストレージに保存する。&lt;br /&gt;データモデルをまるごと、AESの暗号化をして保存する&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;using System.Xml;&lt;br /&gt;using System.Xml.Serialization;&lt;br /&gt;using System.Security.Cryptography;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush: ruby;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// 保存ストレージ保存用ユーザプロファイル&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    [XmlRoot("UserProfile")]&lt;br /&gt;    public class UserProfileDataModel&lt;br /&gt;    {&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// ログインユーザ&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        [XmlElement("LoginUserID")]&lt;br /&gt;        public string LoginUserID &lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            set;&lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// 最終操作日時&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        [XmlElement("LastUpdateDateTime")]&lt;br /&gt;        public DateTime LastUpdateDateTime&lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            set;&lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// 自動ログインタイムアウト&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        [XmlElement("TimeoutHour")]&lt;br /&gt;        public int TimeoutHour&lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            set;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // パスワード&lt;br /&gt;        private const string PASSWORD = "Password_Present";&lt;br /&gt;        // ファイル名&lt;br /&gt;        private const string FILENAME = "UserProfile.xml";&lt;br /&gt;        &lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        ///  分離ストレージへ保存&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        public void SaveProfile()&lt;br /&gt;        {&lt;br /&gt;            var isoStorage = IsolatedStorageFile.GetUserStoreForSite();&lt;br /&gt;            using (isoStorage)&lt;br /&gt;            {&lt;br /&gt;                var isoStream = new IsolatedStorageFileStream(FILENAME&lt;br /&gt;                                                                , FileMode.Create&lt;br /&gt;                                                                , FileAccess.Write&lt;br /&gt;                                                                , isoStorage);&lt;br /&gt;                using (isoStream)&lt;br /&gt;                {&lt;br /&gt;                    var serializer = new XmlSerializer(typeof(UserProfileDataModel));&lt;br /&gt;                    XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();&lt;br /&gt;&lt;br /&gt;                    var aesManage = new AesManaged();&lt;br /&gt;&lt;br /&gt;                    using (aesManage)&lt;br /&gt;                    {&lt;br /&gt;                        GenerateKeyFromPassword(PASSWORD, aesManage);&lt;br /&gt;&lt;br /&gt;                        CryptoStream cryStream = new CryptoStream(isoStream, aesManage.CreateEncryptor(), CryptoStreamMode.Write);&lt;br /&gt;                        using (cryStream)&lt;br /&gt;                        {&lt;br /&gt;                            namespaces.Add(string.Empty, string.Empty);&lt;br /&gt;                            serializer.Serialize(cryStream, this, namespaces);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            } &lt;br /&gt;        }&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// 分離ストレージから読み込み&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;returns&amp;gt;null以外:読み込んだユーザプロファイル&amp;lt;/returns&amp;gt;&lt;br /&gt;        public static UserProfileDataModel LoadProfile()&lt;br /&gt;        {&lt;br /&gt;            UserProfileDataModel loadUserProfile = default(UserProfileDataModel);&lt;br /&gt;&lt;br /&gt;            IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForSite();&lt;br /&gt;            using (isoStorage)&lt;br /&gt;            {&lt;br /&gt;                if (!isoStorage.FileExists(FILENAME))&lt;br /&gt;                {&lt;br /&gt;                    //ファイルが存在しない時&lt;br /&gt;                    return default(UserProfileDataModel);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                var isoStream = new IsolatedStorageFileStream(FILENAME&lt;br /&gt;                                                            , FileMode.Open&lt;br /&gt;                                                            , FileAccess.Read&lt;br /&gt;                                                            , isoStorage);&lt;br /&gt;                using (isoStream)&lt;br /&gt;                {&lt;br /&gt;                    // AES 作成&lt;br /&gt;                    var aesManage = new AesManaged();&lt;br /&gt;                    using (aesManage)&lt;br /&gt;                    {&lt;br /&gt;                        // キーとIVを設定する&lt;br /&gt;                        GenerateKeyFromPassword(PASSWORD, aesManage);&lt;br /&gt;&lt;br /&gt;                        CryptoStream cryStream = new CryptoStream(isoStream, aesManage.CreateDecryptor(), CryptoStreamMode.Read);&lt;br /&gt;                        using (cryStream)&lt;br /&gt;                        {&lt;br /&gt;                            try&lt;br /&gt;                            {&lt;br /&gt;                                var serializer = new XmlSerializer(typeof(UserProfileDataModel));&lt;br /&gt;                                loadUserProfile = (UserProfileDataModel)serializer.Deserialize(cryStream);&lt;br /&gt;                            }&lt;br /&gt;                            catch (CryptographicException)&lt;br /&gt;                            {&lt;br /&gt;                                //復号化失敗&lt;br /&gt;                                return loadUserProfile;&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return loadUserProfile;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// パスワードから共有キーと初期化ベクタを生成する&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="password"&amp;gt;基になるパスワード&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="aesManaged"&amp;gt;対象のAES&amp;lt;/param&amp;gt;&lt;br /&gt;        private static void GenerateKeyFromPassword(string password, AesManaged aesManaged)&lt;br /&gt;        {&lt;br /&gt;            //パスワードから共有キーと初期化ベクタを作成する&lt;br /&gt;            byte[] salt = System.Text.Encoding.UTF8.GetBytes("PasswordSalt:More_Than_8_Bytes");&lt;br /&gt;            var deriveBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(password, salt);&lt;br /&gt;            deriveBytes.IterationCount = 1000;&lt;br /&gt;&lt;br /&gt;            //共有キーと初期化ベクタを生成する&lt;br /&gt;            aesManaged.Key = deriveBytes.GetBytes(aesManaged.KeySize / 8);&lt;br /&gt;            aesManaged.IV = deriveBytes.GetBytes(aesManaged.BlockSize / 8);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-7866276804086639954?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/7866276804086639954/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/10/silverlight4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7866276804086639954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7866276804086639954'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/10/silverlight4.html' title='Silverlight4で分離ストレージへ保存'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-8893205059175673002</id><published>2011-10-13T18:31:00.001+09:00</published><updated>2011-10-13T18:31:11.172+09:00</updated><title type='text'>Dell Vostro200 にWindows2003 Server R2 セットアップ</title><content type='html'>Dell Vostro200 に Windows2003 Server R2 インストールのメモ&lt;br /&gt;普通にセットアップ&lt;br /&gt;ドライバーは、Dellサイトから XPのドライバーを&lt;a href="http://supportapj.dell.com/support/downloads/driverslist.aspx?os=WW1&amp;amp;catid=-1&amp;amp;dateid=-1&amp;amp;impid=-1&amp;amp;osl=JP&amp;amp;typeid=-1&amp;amp;formatid=-1&amp;amp;servicetag=&amp;amp;SystemID=VOS_D_200&amp;amp;hidos=WLH&amp;amp;hidlang=jp&amp;amp;TabIndex=&amp;amp;scanSupported=False&amp;amp;scanConsent=False"&gt;ダウンロード&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;チップセット&lt;/li&gt;&lt;li&gt;Intelのサウンドドライバ゛ー&lt;/li&gt;&lt;li&gt;RealtekのAudioドライバー&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;以上をゴニョゴニョしてセットアップでOK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-8893205059175673002?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/8893205059175673002/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/10/dell-vostro200-windows2003-server-r2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/8893205059175673002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/8893205059175673002'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/10/dell-vostro200-windows2003-server-r2.html' title='Dell Vostro200 にWindows2003 Server R2 セットアップ'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-2040832103475537929</id><published>2011-09-29T18:08:00.001+09:00</published><updated>2011-09-29T18:10:54.083+09:00</updated><title type='text'>TFS2010 で Silverlightのビルドができない</title><content type='html'>TFS2010でSilverlight4のプロジェクトをビルドすると次のエラーになる&lt;br /&gt;&lt;br /&gt;C:\Program Files (x86)\MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.Common.targets (104): Silverlight 4 SDK がインストールされていません。&lt;br /&gt;&lt;br /&gt;検索したところ次のURLに解決策&lt;br /&gt;&lt;a href="http://blog.benday.com/archive/2010/04/20/23272.aspx"&gt;http://blog.benday.com/archive/2010/04/20/23272.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ビルドを編集して&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WHuQGvig2js/ToQ1EmWlUwI/AAAAAAAAAFY/qC85-bW0f3o/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-WHuQGvig2js/ToQ1EmWlUwI/AAAAAAAAAFY/qC85-bW0f3o/s640/%25E7%2584%25A1%25E9%25A1%258C.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;ビルドの編集&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;MSBuildプラットフォームを「Auto」→「X86」へ変更すればOK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-2040832103475537929?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/2040832103475537929/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/09/tfs2010-silverlight.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/2040832103475537929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/2040832103475537929'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/09/tfs2010-silverlight.html' title='TFS2010 で Silverlightのビルドができない'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-WHuQGvig2js/ToQ1EmWlUwI/AAAAAAAAAFY/qC85-bW0f3o/s72-c/%25E7%2584%25A1%25E9%25A1%258C.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-6530162385879935215</id><published>2011-05-24T14:19:00.000+09:00</published><updated>2011-05-24T14:19:37.314+09:00</updated><title type='text'>プロジェクトリソースの画像ファイルをBitmapへ読み込み</title><content type='html'>WPF&lt;br /&gt;画像ファイルをプロジェクトに追加する&lt;br /&gt;ビルドアクションは「Resource」&lt;br /&gt;出力ディレクトリーにコピー「コピーしない」&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: MS Gothic; font-size: 12;"&gt;&lt;span style="color: #2b91af;"&gt;StreamResourceInfo&lt;/span&gt;&amp;nbsp;streamInfo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Application&lt;/span&gt;.GetResourceStream(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"(サブフォルダ)/画像ファイル名"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UriKind&lt;/span&gt;.Relative));&lt;br /&gt;backGround&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;.FromStream(streamInfo.Stream);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-6530162385879935215?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/6530162385879935215/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/05/bitmap.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6530162385879935215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6530162385879935215'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/05/bitmap.html' title='プロジェクトリソースの画像ファイルをBitmapへ読み込み'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-5629398705514027367</id><published>2011-01-30T17:53:00.002+09:00</published><updated>2011-01-30T17:54:45.586+09:00</updated><title type='text'>VisualStudio 2010 でコピーや貼り付け操作を行うとメモリー不足</title><content type='html'>VisualStudio 2010 でコピーや貼り付け操作を行うとメモリー不足が発生する場合があるので、その対策パッチのURLを次に示す。&lt;br /&gt;&lt;a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729"&gt;http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;VisualStudio Blog&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2010/06/25/patch-available-for-cut-or-copy-displaying-insufficient-memory-error-in-vs-2010.aspx"&gt;http://blogs.msdn.com/b/visualstudio/archive/2010/06/25/patch-available-for-cut-or-copy-displaying-insufficient-memory-error-in-vs-2010.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;VS2010のセットアップする毎に探しまくっているので、ここに記す。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-5629398705514027367?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/5629398705514027367/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/01/visualstudio-2010.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/5629398705514027367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/5629398705514027367'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/01/visualstudio-2010.html' title='VisualStudio 2010 でコピーや貼り付け操作を行うとメモリー不足'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-1433062933310934210</id><published>2011-01-12T10:38:00.002+09:00</published><updated>2011-12-01T23:36:03.362+09:00</updated><title type='text'>WinMargeをTFSのツールとして使用する場合のコマンドライン</title><content type='html'>&lt;div&gt;VisualStudio 2010 の TFSで外部ツールとして「WinMarge」を使用する方法&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;設定場所&lt;/div&gt;&lt;div&gt;[ツール]-[オプション]&lt;/div&gt;&lt;div&gt;[ソース管理]-[Visual Studio Team Foundation Server]を選択後&lt;/div&gt;&lt;div&gt;「ユーザツールの構成」&lt;/div&gt;&lt;ol&gt;&lt;li&gt;比較ツール&lt;br /&gt;コマンドには「WinMargeU.exe」を選択&lt;br /&gt;引数「/wl /dl %6 /dr %7 %1 %2」&lt;/li&gt;&lt;li&gt;マージツール&lt;br /&gt;コマンドには「WinMargeU.exe」を選択&lt;br /&gt;引数「/wl /dl %6 /dr %7 %1 %2 /o %4」&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;------------------------------------&lt;br /&gt;(2011/12/01変更)&lt;br /&gt;比較ツールのコマンドラインは次のように変更したほうが、比較中に右ソースの内容を&lt;br /&gt;変更できていいと思います。&lt;br /&gt;旧&lt;br /&gt;「/wl/wr/dl %6 /dr %7 %1 %2」&lt;br /&gt;新&lt;br /&gt;「/wl /dl %6 /dr %7 %1 %2」&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-1433062933310934210?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/1433062933310934210/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2011/01/winmargetfs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/1433062933310934210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/1433062933310934210'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2011/01/winmargetfs.html' title='WinMargeをTFSのツールとして使用する場合のコマンドライン'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-217417331701093699</id><published>2010-12-14T11:30:00.000+09:00</published><updated>2010-12-14T11:30:41.280+09:00</updated><title type='text'>.NET/C# 定義したFile名やメソッド名</title><content type='html'>C++でいうところの __FILENAME__&lt;br /&gt;&lt;br /&gt;System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System.Diagnostics.StackFrame sf = st.GetFrame(0);&lt;br /&gt;&lt;br /&gt;MessageBox.Show( string.Format("{0}:{1}",sf.GetMethod().DeclaringType.FullName, sf.GetMethod().Name));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-217417331701093699?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/217417331701093699/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/12/netc-file.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/217417331701093699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/217417331701093699'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/12/netc-file.html' title='.NET/C# 定義したFile名やメソッド名'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-4739923311177779985</id><published>2010-11-18T20:16:00.000+09:00</published><updated>2010-11-18T20:16:06.639+09:00</updated><title type='text'>MVVM:自分自身のプロパティに設定する方法</title><content type='html'>&lt;span style="font-family: Verdana, sans-serif;"&gt; &lt;blockquote&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;public int FooProperty&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; get&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return fooProperty;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; set&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fooProperty = value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DispatcherHelper.BeginInvoke(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Threading.DispatcherPriority.Send&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , new Action(delegate { FooProperty = 100; })&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-4739923311177779985?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/4739923311177779985/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/11/mvvm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/4739923311177779985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/4739923311177779985'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/11/mvvm.html' title='MVVM:自分自身のプロパティに設定する方法'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-2462957952055285391</id><published>2010-05-21T12:48:00.001+09:00</published><updated>2010-05-21T13:01:39.208+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>TreeViewコントロールの不具合</title><content type='html'>.Net 3.5までのTreeViewコントロールは追加した項目の最終行が見切れたり表示しない現象が発生します。.Net 4.0では発生しない事を確認しました。&lt;br /&gt;&lt;br /&gt;次の様な簡単なテストプログラムを準備します。&lt;br /&gt;(MSDNフォームに投稿したコードと同じです。&lt;a href="http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/7ebf2c0b-b89e-488b-9c23-f80f6dd1e31e"&gt;→MSDNフォーラム&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;(1)適当なVisialBasicのWindowsフォームアプリケーションプロジェクトを作成する&lt;br /&gt;(2)Form1.vbをデザインで開き、TreeViewコントロールを配置する(Location=20,20)(Sizeは200,100)&lt;br /&gt;(3)Anchorを「Top,Bottom」に設定する&lt;br /&gt;(4)Form1.vbのコードに次のようにコーディングする&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Handles MyBase.Load&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;For _i As Integer = 1 To 10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;TreeView1.Nodes.Add(String.Format("{0}", _i))&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Next&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;End Sub&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;実行する&lt;br /&gt;&lt;br /&gt;現象の確認&lt;br /&gt;&lt;br /&gt;(1)Form1をリサイズすると、「１」～「９」まではスクロールバーが表示してスクロールすれば「１０」が表示されるが、&lt;br /&gt;リサイズしてスクロールバーが消えた時のTreeViewではスクロールによって「１０」を表示することができない。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;div style="text-align: auto;"&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline;"&gt;&lt;a href="http://3.bp.blogspot.com/_etJN8wMK4lU/S_YCj2MH6EI/AAAAAAAAAC8/e5sSDO0n7_o/s1600/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A-1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_etJN8wMK4lU/S_YCj2MH6EI/AAAAAAAAAC8/e5sSDO0n7_o/s320/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A-1.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;回避策&lt;/div&gt;&lt;div style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;次のコードをForm_Loadで実行する&lt;/div&gt;&lt;div style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;/div&gt;&lt;div style="border-bottom-style: none; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-style: initial; border-top-style: none; border-width: initial; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Dim _mi As Reflection.MethodInfo = TreeView1.GetType().GetMethod("ForceScrollbarUpdate", _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)&lt;br /&gt;_mi.Invoke(TreeView1, New Object() {True})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; font-family: inherit; font-style: inherit; font-weight: inherit; list-style-type: none; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-2462957952055285391?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/2462957952055285391/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/treeview.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/2462957952055285391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/2462957952055285391'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/treeview.html' title='TreeViewコントロールの不具合'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_etJN8wMK4lU/S_YCj2MH6EI/AAAAAAAAAC8/e5sSDO0n7_o/s72-c/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A-1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-5293885604353357600</id><published>2010-05-20T01:37:00.001+09:00</published><updated>2011-01-30T17:48:19.395+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>XML+XSLT→HTML覚え書き</title><content type='html'>xsltを使った変換コードを覚え書きとする。&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Private m_trnsStyleSheet As Xsl.XslCompiledTransform&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _xStyleSheet As XDocument = XDocument.Parse(My.Resources.stylesheet)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m_trnsStyleSheet = New Xsl.XslCompiledTransform()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m_trnsStyleSheet.Load(_xStyleSheet.CreateReader())&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;↑この部分は時間がかかるので初回のみ動作させること&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _strwrtHTML As New System.Text.StringBuilder&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Using _wrtHTML As XmlWriter = _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XmlWriter.Create(_strwrtHTML, m_trnsStyleSheet.OutputSettings)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XML+XSLT→HTML&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m_trnsStyleSheet.Transform(mXMLElement.CreateReader(), Nothing, _wrtHTML)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctlWeb.DocumentText = _strwrtHTML.ToString()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Using&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;XmlWriterでStringBuilderが使えるので、非常に簡潔になった&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-5293885604353357600?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/5293885604353357600/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/xmlxslthtml.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/5293885604353357600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/5293885604353357600'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/xmlxslthtml.html' title='XML+XSLT→HTML覚え書き'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-6260766802393160642</id><published>2010-05-17T11:54:00.001+09:00</published><updated>2010-05-17T11:56:50.785+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>ListBox : 項目が存在しないエリアを選択しても選択されないように</title><content type='html'>なんで.Netのコントロールは、細かい動作に不具合が多いのだろう&lt;br /&gt;&lt;br /&gt;ListBox(CheckedListBox)のコントロールの動きについて、項目がListBoxの高さ一杯まで埋まっていない場合、項目がないエリアをクリックすると、選択された動作(SelectedIndexChangedイベント発生)し、違和感がある。&lt;br /&gt;ＶＢ６のコントロールでは、こんな動作しなかったのに....&lt;br /&gt;おかげで、ListBoxを利用した抽出画面にお客さんからクレーム来たよ(泣)&lt;br /&gt;&lt;br /&gt;ＶＢ６と同様に項目が存在しないエリアを選択しても選択されないようにするには...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;ListBoxコントロールにはクリックした場所からその項目のIndexを取得するメソッド(IndexFromPoint)があります。&lt;br /&gt;これを利用し、継承コントロールを作りました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Public Class CustomListBox&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Inherits ListBox&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _blnHandled As Boolean = False&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Select Case m.Msg&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Case &amp;amp;H201, &amp;amp;H202, &amp;amp;H203 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBL&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _ptMouse As Point = MyBase.PointToClient(MousePosition)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _index As Integer = MyBase.IndexFromPoint(_ptMouse)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If _index &amp;lt; 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_blnHandled = True&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ElseIf _index &amp;lt; Items.Count Then&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; クリックした位置がリストボックスコンテンツのある範囲か無い範囲かの計算 &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _lngContentsHeight As Integer = 0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _indexSizeCalc As Integer = MyBase.IndexFromPoint(0, 0) &amp;nbsp; &amp;nbsp; &amp;nbsp;'先頭位置のインデックス&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Do While (_indexSizeCalc &amp;lt; Items.Count) And (_lngContentsHeight &amp;lt;= Height)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_lngContentsHeight += GetItemHeight(_indexSizeCalc) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'コンテンツ高さ計算&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_indexSizeCalc += 1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Loop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (_ptMouse.Y &amp;gt; _lngContentsHeight) Then &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '?領域外&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_blnHandled = True&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Select&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (Not _blnHandled) Then &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '?処理する&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyBase.WndProc(m)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;End Class&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-6260766802393160642?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/6260766802393160642/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/listbox.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6260766802393160642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6260766802393160642'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/listbox.html' title='ListBox : 項目が存在しないエリアを選択しても選択されないように'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-6724859479306171790</id><published>2010-05-16T13:02:00.006+09:00</published><updated>2011-01-30T17:49:47.723+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>WebBrowser :  .Document.Write()は使わない方がよい</title><content type='html'>WebBrowserコントロールにテキストを設定する手段として、.DocumenetTextにHTMLテキストを設定する手法が一般的である。&lt;br /&gt;&lt;br /&gt;しかし、この方法ではHTMLテキストを設定した直後から&amp;nbsp;DocumentComplete()イベントが発生するまで .DocumentTextは以前の設定された内容になっている&lt;br /&gt;&lt;br /&gt;また、DocumentComplete()を待たずに、DocumentTextに連続してHTMLテキストを設定すると、２回目以降に設定したテキストが無視される。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて、設定した内容を即時反映するにはどうすればよいか？&lt;br /&gt;都合の良いことに Write() というメソッドが存在する。&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;.Document.OpenNew(False)&lt;br /&gt;.Document.Write( &lt;i&gt;HTMLテキスト&lt;/i&gt; )&lt;br /&gt;&lt;br /&gt;上記の様にテキストを設定すると、DocumentCompleteイベントが発生しないが、DocumentTextにはWrite()で設定した文字列が設定されている。&lt;br /&gt;&lt;br /&gt;喜んで Write() を使うと大変な目に遭う。&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;HTMLテキスト中にある JavaScriptが実行されない&lt;/li&gt;&lt;li&gt;WebBrowserコントロールが張り付いたFormがフォーカスを奪う&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;やっぱり DocumentTextプロパティを使うしかないそうだ。&lt;br /&gt;&lt;br /&gt;DocumentTextにHTMLテキストを設定してその直後に DocumentCompleteを待つコードを次に示す&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;&amp;lt;定義部&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;flags()&gt;&amp;nbsp;&lt;/flags()&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Friend Enum POSTMESSAGE_FLAGS&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PM_NOREMOVE = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PM_REMOVE = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Enum&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private Shared Function PeekMessage(ByRef m As System.Windows.Forms.Message, _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ByVal hWnd As IntPtr, _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ByVal FilterMin As Integer, _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ByVal FilterMax As Integer, _&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ByVal RemoveMsg As POSTMESSAGE_FLAGS) As Integer&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private Shared Function DispatchMessage(ByRef m As System.Windows.Forms.Message) As Integer&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;lt;コード部&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;' WebBrowserコントロールにテキストを設定する&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private Sub SetWebbrowserDocumentText(ByVal ctlWeb As WebBrowser, ByVal strValue As String)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mblnWebWaitForComplete = True&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctlWeb.DocumentText = strValue&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'完了待ち&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;With ctlWeb&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Do Until (.ReadyState = WebBrowserReadyState.Complete AndAlso mblnWebWaitForComplete = False)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _m As System.Windows.Forms.Message&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; メッセージループ&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _get As Integer = PeekMessage(_m, IntPtr.Zero, &amp;amp;H400, &amp;amp;HFFFF, POSTMESSAGE_FLAGS.PM_REMOVE Or &amp;amp;HF0000) '入力イベント以外&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Do Until (_get = 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DispatchMessage(_m)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_get = PeekMessage(_m, IntPtr.Zero, &amp;amp;H400, &amp;amp;HFFFF, POSTMESSAGE_FLAGS.PM_REMOVE Or &amp;amp;HF0000) '入力イベント以外&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Loop&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Loop&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End With&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private mblnWebWaitForComplete As Boolean = False &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '完了待ちフラグ&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'Webプラウザの完了&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private Sub webKarteEdit_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles webKarteEdit.DocumentCompleted&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mblnWebWaitForComplete = False&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'以下コード&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Sub&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-6724859479306171790?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/6724859479306171790/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/webbrowser-documentwrite.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6724859479306171790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/6724859479306171790'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/webbrowser-documentwrite.html' title='WebBrowser :  .Document.Write()は使わない方がよい'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-7431903817118667664</id><published>2010-05-15T21:27:00.001+09:00</published><updated>2010-05-15T23:45:24.580+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>ListBoxがOwnerDrawVariableの時、マウスホイールで逆スクロール対策</title><content type='html'>ListBoxコントロールで&lt;br /&gt;DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable&lt;br /&gt;を設定した時、マウスホイールのスクロールが一瞬逆スクロールしている現象の対策&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Private Function HIWORD(ByVal intValue As Integer) As Integer&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (intValue And &amp;amp;H80000000) = &amp;amp;H80000000 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return (intValue &amp;gt;&amp;gt; 16)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return ((intValue &amp;gt;&amp;gt; 16) And &amp;amp;HFFFF)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Function&lt;br /&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Select Case m.Msg&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Case &amp;amp;H20A &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'WM_MOUSEWHEEL&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim _d As Integer = HIWORD(m.WParam.ToInt32())&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For _count As Integer = 1 To SystemInformation.MouseWheelScrollLines &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'マウスホイールスクロール量(1行ずつ)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Me.TopIndex = Math.Max(0, Me.TopIndex + If(_d &amp;lt; 0, 1, -1))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Me.Invalidate()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Me.Update()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Next&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Select&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyBase.WndProc(m)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End Sub&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;まぁ、１行ずつスクロールするという事だ。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-7431903817118667664?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/7431903817118667664/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/listboxownerdrawvariable.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7431903817118667664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/7431903817118667664'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/listboxownerdrawvariable.html' title='ListBoxがOwnerDrawVariableの時、マウスホイールで逆スクロール対策'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4000441878577059496.post-3049460436300626630</id><published>2010-05-15T21:20:00.001+09:00</published><updated>2010-05-15T23:46:30.997+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>GDI+でパターンの拡大縮小</title><content type='html'>&lt;div style="font-family: &amp;quot;Meiryo UI&amp;quot;; font-size: 9.0pt; margin: 0in;"&gt;&lt;span lang="en-US"&gt;GDI+&lt;/span&gt;&lt;span lang="ja"&gt;でパターンの拡大&lt;/span&gt;&lt;span lang="en-US"&gt;/&lt;/span&gt;&lt;span lang="ja"&gt;縮小を行う場合、水平、垂直方向に&lt;/span&gt;&lt;span lang="en-US"&gt;0.5&lt;/span&gt;&lt;span lang="ja"&gt;ドットずれて実行されるので、オフセット値を操作する事&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Meiryo UI&amp;quot;; font-size: 9.0pt; margin: 0in;"&gt;&lt;span lang="ja"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 9.0pt; margin: 0in;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 9.0pt; margin: 0in;"&gt;&lt;span style="font-family: Verdana;"&gt;'&lt;/span&gt;&lt;span style="font-family: 'Meiryo UI';"&gt;描画モードをニアレストネイバーに設定します&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana; font-size: 9.0pt; margin: 0in;"&gt;e.Graphics.InterpolationMode = &lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;Drawing2D.InterpolationMode.NearestNeighbor&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 9.0pt; margin: 0in;"&gt;&lt;span style="font-family: Verdana;"&gt;'&lt;/span&gt;&lt;span style="font-family: 'Meiryo UI';"&gt;ピクセルオフセットを設定します&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana; font-size: 9.0pt; margin: 0in;"&gt;e.Graphics.PixelOffsetMode = &lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;PixelOffsetMode.Half&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4000441878577059496-3049460436300626630?l=kcodememo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kcodememo.blogspot.com/feeds/3049460436300626630/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://kcodememo.blogspot.com/2010/05/gdi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/3049460436300626630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4000441878577059496/posts/default/3049460436300626630'/><link rel='alternate' type='text/html' href='http://kcodememo.blogspot.com/2010/05/gdi.html' title='GDI+でパターンの拡大縮小'/><author><name>かっとし</name><uri>http://www.blogger.com/profile/12903931295795693821</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_etJN8wMK4lU/S-6UYQbrSvI/AAAAAAAAACY/uv8Lg9h8DWY/S220/%E3%83%91%E3%83%91(%E8%83%8C%E6%99%AF%E9%80%8F%E6%98%8E).gif'/></author><thr:total>0</thr:total></entry></feed>
