About the Schematic diagram auto refresh Sample
[C#]
FormAutorefresh.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Schematic;
using ESRI.ArcGIS.SchematicUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.Framework;
namespace Autorefresh
{
public partial class FormAutoRefresh : Form
{
private ISchematicInMemoryDiagram m_schematicInMemoryDiagram = null;
private IApplication m_application = null;
private int m_minute = 0;
private int m_second = 4;
public FormAutoRefresh()
{
InitializeComponent();
}
~FormAutoRefresh()
{
}
public void InitializeMinute()
{
for (int i = 0; i < 10; i++)
{
this.IntervalMinute.Items.Add(this.IntervalMinute.FormatString.Insert(0, i.ToString()));
}
this.IntervalMinute.SelectedIndex = m_minute;
}
public void InitializeSecond()
{
for (int i = 0; i < 60; i++)
{
this.IntervalSecond.Items.Add(this.IntervalSecond.FormatString.Insert(0, i.ToString()));
}
this.IntervalSecond.SelectedIndex = m_second;
}
public bool GetAutoOn()
{
return AutoOn.Checked;
}
public bool GetAutoOff()
{
return AutoOff.Checked;
}
public void SetAutoOn(bool on)
{
AutoOn.Checked = on;
}
public void SetAutoOff(bool off)
{
AutoOff.Checked = off;
}
public int GetMinute()
{
return IntervalMinute.SelectedIndex;
}
public int GetSecond()
{
return IntervalSecond.SelectedIndex;
}
private void IntervalMinute_SelectedIndexChanged(object sender, EventArgs e)
{
InitializeTimer();
}
private void IntervalSecond_SelectedIndexChanged(object sender, EventArgs e)
{
InitializeTimer();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
timerAutoRefresh.Stop();
this.IntervalSecond.SelectedIndex = m_second;
this.IntervalMinute.SelectedIndex = m_minute;
this.Hide();
}
private void InitializeTimer()
{
///Obtaint or to dne the time by millisecondes
////// <summary>
/// Obtaint or to dne the time by millisecondes
/// </summary>
if (this.IntervalMinute.SelectedIndex != -1 && this.IntervalSecond.SelectedIndex != -1)
{
int time = (this.IntervalMinute.SelectedIndex * 60000) + (this.IntervalSecond.SelectedIndex * 1000);
if (time > 0)
timerAutoRefresh.Interval = time;
else
timerAutoRefresh.Stop();
}
}
private void buttonOK_Click(object sender, EventArgs e)
{
if (this.AutoOn.Checked)
{
InitializeTimer();
if (timerAutoRefresh.Interval > 0)
timerAutoRefresh.Start();
}
else
timerAutoRefresh.Stop();
this.Hide();
}
private void FormAutoRefresh_Load(object sender, EventArgs e)
{
this.IntervalSecond.SelectedIndex = m_second;
this.IntervalMinute.SelectedIndex = m_minute;
}
public void SetSchematicInmemoryDiagram(ISchematicInMemoryDiagram SchMemoryDiag)
{
m_schematicInMemoryDiagram = SchMemoryDiag;
}
public ESRI.ArcGIS.Framework.IApplication Appli
{
set
{
m_application = value;
}
}
private void RefreshViewerWindows()
{
//refresh viewer window
IApplicationWindows applicationWindows = m_application as IApplicationWindows;
ISet set = applicationWindows.DataWindows;
if (set != null)
{
set.Reset();
IMapInsetWindow dataWindow = (IMapInsetWindow)set.Next();
while (dataWindow != null)
{
dataWindow.Refresh();
dataWindow = (IMapInsetWindow)set.Next();
}
}
}
private void timerAutoRefresh_Tick(object sender, EventArgs e)
{
if (m_schematicInMemoryDiagram != null && this.AutoOn.Checked)
{
timerAutoRefresh.Stop();
m_schematicInMemoryDiagram.Refresh();
ILayer layer;
IDocument doc;
IMxDocument mxDoc;
IMaps maps;
IEnumLayer enumLayers;
IMap map;
ISchematicLayer schematicLayer = null;
doc = m_application.Document;
mxDoc = doc as IMxDocument;
if (mxDoc == null) return;
maps = mxDoc.Maps;
for (int i = 0; i < maps.Count; i++)
{
map = maps.get_Item(i);
enumLayers = map.get_Layers(null, true);
enumLayers.Reset();
layer = enumLayers.Next();
while (layer != null)
{
string sText = layer.Name;
try
{
if (layer is ISchematicLayer)
{
schematicLayer = (ISchematicLayer)layer;
if (schematicLayer.SchematicInMemoryDiagram != null)
{
if (schematicLayer.SchematicInMemoryDiagram == m_schematicInMemoryDiagram) break;
}
else if (sText == m_schematicInMemoryDiagram.Name) break;
}
}
finally
{
layer = null;
}
schematicLayer = null;
layer = enumLayers.Next();
}
if (schematicLayer != null)
{
IActiveView actiView;
actiView = (IActiveView)map;
actiView.Refresh();
}
}
RefreshViewerWindows();
timerAutoRefresh.Start();
}
}
}
}
[Visual Basic .NET]
FormAutorefresh.vb
Imports System.Windows.Forms
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports ESRI.ArcGIS.Schematic
Imports ESRI.ArcGIS.SchematicUI
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.Carto
Public Class FormAutorefresh
Private m_schematicInMemoryDiagram As ISchematicInMemoryDiagram = Nothing
Private m_application As ESRI.ArcGIS.Framework.IApplication = Nothing
Private m_minute As Integer = 0
Private m_second As Integer = 4
Public Sub FormAutoRefresh()
InitializeComponent()
End Sub
Public Sub InitializeMinute()
For i As Integer = 0 To 9
Me.IntervalMinute.Items.Add(Me.IntervalMinute.FormatString.Insert(0, i.ToString()))
Next
Me.IntervalMinute.SelectedIndex = m_minute
End Sub
Public Sub InitializeSecond()
For i As Integer = 0 To 60
Me.IntervalSecond.Items.Add(Me.IntervalSecond.FormatString.Insert(0, i.ToString()))
Next
Me.IntervalSecond.SelectedIndex = m_second
End Sub
Public Function GetMinute() As Integer
Return IntervalMinute.SelectedIndex
End Function
Public Function GetSecond() As Integer
Return IntervalSecond.SelectedIndex
End Function
Public Sub SetAutoOn(ByVal val As Boolean)
AutoOn.Checked = val
End Sub
Public Sub SetAutoOff(ByVal val As Boolean)
AutoOff.Checked = val
End Sub
Public Function GetAutoOn() As Boolean
Return AutoOn.Checked
End Function
Public Function GetAutoOff() As Boolean
Return AutoOff.Checked
End Function
Private Sub IntervalMinute_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
InitializeTimer()
End Sub
Private Sub IntervalSecond_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
InitializeTimer()
End Sub
Private Sub InitializeTimer()
'Obtains or to define the time by milliseconds
'<summary>
'Obtains or to define the time by milliseconds
'</summary>
If Me.IntervalMinute.SelectedIndex <> -1 AndAlso Me.IntervalSecond.SelectedIndex <> -1 Then
Dim time As Integer = (Me.IntervalMinute.SelectedIndex * 60000) + (Me.IntervalSecond.SelectedIndex * 1000)
If time > 0 Then
timerAutoRefresh.Interval = time
Else
timerAutoRefresh.Stop()
End If
End If
End Sub
Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
If Me.AutoOn.Checked Then
InitializeTimer()
If timerAutoRefresh.Interval > 0 Then
timerAutoRefresh.Start()
Else
timerAutoRefresh.Stop()
End If
End If
Me.Hide()
End Sub
Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click
Me.timerAutoRefresh.Stop()
Me.IntervalSecond.SelectedIndex = m_second
Me.IntervalMinute.SelectedIndex = m_minute
Me.Hide()
End Sub
Private Sub FormAutorefresh_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.IntervalSecond.SelectedIndex = m_second
Me.IntervalMinute.SelectedIndex = m_minute
End Sub
Public Sub SetSchematicInmemoryDiagram(ByVal SchMemoryDiag As ISchematicInMemoryDiagram)
m_schematicInMemoryDiagram = SchMemoryDiag
End Sub
Public Sub Appli(ByVal value As ESRI.ArcGIS.Framework.IApplication)
m_application = value
End Sub
Private Sub RefreshViewerWindows()
'refresh viewer window
Dim applicationWindows As IApplicationWindows
applicationWindows = TryCast(m_application, IApplicationWindows)
Dim setWindows As ISet
setWindows = applicationWindows.DataWindows
If setWindows IsNot Nothing Then
setWindows.Reset()
Dim dataWindow As IMapInsetWindow
dataWindow = TryCast(setWindows.Next(), IMapInsetWindow)
While dataWindow IsNot Nothing
dataWindow.Refresh()
dataWindow = TryCast(setWindows.Next(), IMapInsetWindow)
End While
End If
End Sub
Private Sub timerAutoRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerAutoRefresh.Tick
If m_schematicInMemoryDiagram IsNot Nothing AndAlso Me.AutoOn.Checked Then
timerAutoRefresh.Stop()
m_schematicInMemoryDiagram.Refresh()
Dim layer As ILayer
Dim doc As ESRI.ArcGIS.Framework.IDocument
Dim mxDoc As IMxDocument
Dim maps As IMaps
Dim enumLayers As IEnumLayer
Dim map As IMap
Dim schematicLayer As ISchematicLayer = Nothing
doc = m_application.Document
mxDoc = TryCast(doc, IMxDocument)
If mxDoc Is Nothing Then
Exit Sub
End If
maps = mxDoc.Maps
For i As Integer = 0 To maps.Count - 1
map = maps.Item(i)
enumLayers = map.Layers(Nothing, True)
enumLayers.Reset()
layer = enumLayers.Next()
Do While (Not layer Is Nothing)
Dim sText As String = layer.Name
Try
If TypeOf layer Is SchematicLayer Then
schematicLayer = TryCast(layer, ISchematicLayer)
If schematicLayer.SchematicInMemoryDiagram IsNot Nothing Then
If schematicLayer.SchematicInMemoryDiagram Is m_schematicInMemoryDiagram Then
Exit Do
End If
ElseIf sText = m_schematicInMemoryDiagram.Name Then
Exit Do
End If
End If
Finally
layer = Nothing
End Try
schematicLayer = Nothing
layer = enumLayers.Next()
Loop
If schematicLayer IsNot Nothing Then
Dim actiView As IActiveView
actiView = TryCast(map, IActiveView)
actiView.Refresh()
End If
Next
RefreshViewerWindows()
timerAutoRefresh.Start()
End If
End Sub
End Class